笔记(5)
来源:互联网 发布:战舰世界 战列舰 知乎 编辑:程序博客网 时间:2024/05/02 02:02
二维数组:
int arr[2][3] = {{1,2,3}, {3,5,6}};
arr == &arr[0] //数组名是数组第一个元素的首地址
arr[0] == &arr[0][0];////arr[0]是第二维的数组名,arr[0][0]的地址就是以为数组的arr[0]元素
int *p = arr[0];
int *p[2] = {arr[0],arr[1]};
int (*p1)[3] = arr;
int **p = arr[0][0];
int a, b;
int *p1, *p;
p1 = &a;
p = &p1;//*p = **p1
数组指针(指针数组):
// int *p[2] = {arr[0], arr[1]}; // == p[0] == arr[0]
// int (p1)[3] = arr; // (*(p1+i)+j)
二级(重)指针例子:
void func(int **p){}int main(){ int a = 23, b = 33; int **p, *p1; p1 = &a; p = &p1; func(p); int *a; a = (int*)0x7fff1234;//非法地址
结构体struct
基本数据结构,数组是一种数据结构(缺点:元素单一)
结构体是一种数据结构,解决了数组里不能存放多种类型的数据这种缺陷。
struct infor // struct infor 是标识符,必须整体使用{ char name[50]; // (元素)成员变量(属性) char is_male; int age;}; // 分号坚决不能少//这么写也行//struct data{ int a; float b; char c;}s; // 这个S是变量名的意思;定义类型的同时给出了结构体的变量名struct st{ int a; float b; char c;}; // 结构体类型void set_value_func(struct st arr[], int lenth){ int i = 0; for (i=0; i<lenth; i++) { scanf("%d", &arr[i].a); scanf("%f", &arr[i].b); scanf("%d", &arr[i].c); }}void show_infor_func(struct st arr[], int lenth){ int i = 0; for (i=0; i<lenth; i++) { printf("%d %.2f %d\n", arr[i].a, arr[i].b, arr[i].c); }}void func(struct st *p) // p = &s{ p->a = 1; p->b = 3.14; p->c = 2;}//定义了一个类型,占空间否?typedef struct infor S; int main(void){ //初始化,和数组很像,挨个进行赋值 S s2 = {1, 2}; printf("结构体元素:%s %d %d.\n", s2.name, s2.is_male, s2.age); S s3 = {1, 2, 3}; printf("结构体元素:%s %d %d.\n", s3.name, s3.is_male, s3.age); S s4 = {"lk", 1}; printf("结构体元素:%s %d %d.\n", s4.name, s4.is_male, s4.age); //初始化 S s5 = {.age=27, .name="吕科"}; printf("结构体元素:[%s] %d %d.\n", s5.name, s5.is_male, s5.age); // 56 只是你这个类型所占字节的大小 printf("sizeof(S) = %d.\n", sizeof(S)); //定义了一个结构体变量,你有变量,才会给你分配空间 //初始化// S s = {"吕科", 1, 17}; //遍历元素, 运算符(.)是专用于结构体变量访问个元素// printf("结构体元素:%d %d %s.\n", s.is_male, s.age, s.name);/* S s1; //赋值个成员变量 //.符号访问到结构体的成员变量名 strcpy(s1.name, "吕科"); s1.is_male = 1; s1.age = 17; printf("结构体元素:%d %d %s.\n", s1.is_male, s1.age, s1.name);*//* //结构体指针, 野指针// struct st *p; struct st s;// p = &s; //调用函数赋值// func(p); func(&s); printf("s.a = %d.\n", s.a);*//* //结构体还有数组(结构体数组) struct st arr[3]; set_value_func(arr, 3); show_infor_func(arr, 3);*//* //该类型的变量 struct st s; s.a = 1; s.b = 3.14; s.c = 2; //结构体里.号的实质 //&s类型是struct st * int *p_a = (int *)&s; printf("*p_a = %d.\n", *p_a);// float *p_b = (float *)((char *)&s+4); // sizeof(char) * 4 = 4字节a// 分析:地址值转化为数字,加上几就是几 float *p_b = (float *)((long)&s+4); // overlap printf("*p_b = %.2f.\n", *p_b); char *p_c = (char *)((char *)&s+8); printf("*p_c = %d.\n", *p_c); struct st s1; //相同结构体变量之间可以互相赋值.在C++里有个称呼叫做:赋值构造 s1 = s; printf("s1.a = %d.\n", s1.a);*/ return 0;}//结构体字节对齐struct str1 // 7{ int a; // 4 char b; // 1 + 1 short c; // 2}s1; // 8struct str2{ char a; // 1 char b; // 1 // + 2 int c; // 4}s2; // 8struct str3 // 6{ int a; char b; char c; // + 2}s3; // 8struct str4 // 10{ struct str1 s; // 8 char a; // 1 + 1 short b; }s4; // 12 typedef struct str5 // 5{ int a; char b;}ST, *p_ST; // ST是struct str5的类型名,p_ST是struct str5 *类型的别名struct str6 // 5{ char a; int b;}S, *p = &S; // S是struct str6的变量名, p是此结构体的指针变量名。//默认是4字节对齐,最大的基本数据类型和这个默认值要相比较,取其小struct str7{ char ab; int a[2];// char b;};
阅读全文
0 0
- SEP笔记(5)
- Python笔记(5)
- WCDMA笔记(5)
- 驱动笔记(5)
- Java笔记(5)
- Java笔记(5)
- Android笔记(5)
- Linux笔记(5)
- 学习笔记(5)
- Oracle笔记(5)
- js笔记(5)
- js笔记(5)
- 笔记(5)
- (5)birt笔记
- JavaWeb笔记(5)
- 笔记(5)
- 程序员补课笔记(5)
- J2ME学习笔记(5)
- 在行列都排好序的矩阵中找数
- 自制感光法印制PCB(干货)-激光雕刻丝印层
- Font Awesome(五)
- ubuntu下安装node
- java程序员面试题之32问
- 笔记(5)
- Hadoop RPC实战
- CapsNet
- Font Awesome(六)
- hrbust 2354 An Easy Geometry Problem
- 分治---线性时间选择
- retrain tensorflow中InceptionV3模型
- 如何让opencv成为MATLAB中的一个工具箱
- 重识java11