C语言单元小结(5)
来源:互联网 发布:php 断点续传 编辑:程序博客网 时间:2024/05/22 13:17
二维数组
int arr[2][3] = {{1, 2, 3}, {4, 5, 6}};
数组名是数组第一个元素的首地址,也就是arr == &arr[0]
arr[0]是第二维的数组名,也就是arr[0] == &arr[0][0]
arr[0][0]是元素
//一重指针和二维数组匹配
int *p = arr[0];
p++;
//指针数组、数组指针和二位数组匹配
int *p[2] = {arr[0], arr[1]}; // == p[0] == arr[0]
int (*p1)[3] = arr; // ((p1+i)+j)
二级指针
void func(int **p)
{
…
}
//定义指针
int a = 23, b = 33;
int **p, *p1;
//绑定
p1 = &a;
p = &p1;
//调用函数
func(p);
非法地址访问
int *a
a=(int *)0x123 //(int *)把数值0x123强制转化为地址
*a=xxx
不能这样使用非法地址
结构体struct
知识点
struct infor // struct infor 是标识符,必须整体使用{ char name[50]; // (元素)成员变量(属性) char is_male; int age;}; // 分号坚决不能少struct //struct data{ int a; float b; char c;}s; // 这个S是变量名的意思;定义类型的同时给出了结构体的变量名typedef struct str5{ int a; char b;}ST, *p_ST; // ST是struct str5的类型名,p_ST是struct str5 *类型的别名ST a;//结构体类型的变量p_ST p;//指向结构体变量的指针
定义一个类型,不占空间,声明该类型的变量时才分配空间。
typedef struct infor S; //重定义类型名
初始化
完全初始化
S s1={“name”,’0’,3};
部分初始化
S s2={“name”};
S s3={.age=3};
运算符(.)是专用于结构体变量访问个元素
注意:
S s3 = {1, 2, 3};//错误:由于第一个成员是字符串类型,所以系统会读取数据到遇到’\0’赋值给.name成员
结构体指针
struct st *p;//野指针struct st s;p = &s;
结构体数组
void set_value_func(struct st arr[], int lenth){ int i = 0; for (i=0; i<lenth; i++) { scanf("%d %f %d", &arr[i].a,&arr[i].b,&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); }}struct st arr[3];set_value_func(arr, 3);show_infor_func(arr, 3);
结构体里.号的实质
&s类型是struct st *
方法一
int *p_a = (int *)&s;
printf(“*p_a = %d.\n”, *p_a);
float *p_b = (float *)((char *)&s+4); // 4字节
方法二
// 分析:地址值转化为数字
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);
相同结构体变量之间可以互相赋值
srtuct{ int a; char b;}s1,s;s1.a=1;s1.b='a';s1 = s;
字节对齐
1、 结构体变量的地址是从4字节对齐的未知开始(0、4、8、C)
2、各成员在结构体里自身要对齐;
3、成员之间不满足自身对齐,得填充(padding)
4、满足结构体自身对齐的最小倍数
5、默认是4字节对齐,最大的基本数据类型和这个默认值要相比较,取其小
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{ char a; short b; short c;}s4; //6
- C语言单元小结(5)
- C语言单元小结(1)
- C语言单元小结(2)
- C语言单元小结(3)
- C语言单元小结(4)
- C语言单元小结(6)
- Linux单元小结(5)
- 程序设计入门C语言单元测验
- C语言小结
- c语言小结
- C语言小结
- c语言笔试小结
- C语言小结
- C语言指针小结
- c语言学习小结
- C语言关键字小结
- 19、C语言小结
- C 语言小结
- 计算机语言历史——C语言
- hihocoder上第180周《Nature Numbers》
- 学徒浅析Android——Android原生下载机制针对0K大小文件下载异常的分析
- NEFU 1270 智力异或(2)|| 2017icpc青岛站 热身赛 C (01字典树)
- darwin之回调
- C语言单元小结(5)
- 设计模式 —— 单例模式
- java中参数传递问题
- springboot+mybatis 查询一下
- 蓄水池算法
- 第二章 虚拟化技术
- 树形DP
- 3、MyBatis中DAO开发
- js