「这是我参与2022首次更文挑战的第8天,活动详情查看:2022首次更文挑战」
数组指针与二维数组
-
初始化二维数组是可以偷懒的
- int array[2][3]={{0,1,2},{3,4,5}};
- 或者:int array[][3]={{0,1,2},{3,4,5}};
-
定义一个数组指针是这样的:int (*p)[3];
-
如何解释如下语句:int (*p)[3]=array;
-
举例
-
结果
void指针和NULL指针
-
void指针
-
因为定义变量时会分配内存空间大小,当变量定义为void类型时编译器会报错。
- 举例
- 结果(编译出错)
- 举例
- void指针称为通用指针,就是可以指向任意类型的数组。即任意类型的指针都可以赋值给void指针。
- 举例
- 结果
-
注意\
- 字符串在C语言中有个特殊的约定:只需要指向字符串的起始地址,然后一个字节一个字节的读下去,读到/0这个特殊的空字符为止表示字符串结束。
-
-
NULL指针
- 指针不指向任何数据,#define NULL ((void *)0)
- 当不清楚要将指针初始化为什么地址时,将其初始化为NULL;在对指针进行解引用时,先检查该指针是否为NULL。这种策略可以节省大量的调试时间。
- 举例
- 结果
-
NULL不是NUL
- NULL用于指针和对象,表示控制,指向一个不被使用的地址;而‘\0’表示字符串的结尾。
指向指针的指针
-
指向指针的指针
- 演示
- 举例
- 结果
- 当然可以一直向下引用:指向指针的指针的指针的……
- 演示
-
指针数组和指向指针的指针
-
至少有两大好处
- 避免重复分配内存
- 只需要进行一处修改
- 举例
- 结果
-
-
数组指针和二维数组
- 举例
- 结果
- 举例
-
注意
- 不能使用指针直接指向多维数组,因为跨度加1和减1不一样,要使用数组指针才能同步
- 举例
- 结果