【c语言】指针数组和数组指针 |
您所在的位置:网站首页 › 指针数组与函数 › 【c语言】指针数组和数组指针 |
数组指针与指针数组:
优先级:()>[]>* 首先我们要说的一个知识点是 int *p[3] 和 int (*p)[3]的区别 int (*p)[3] 因为()优先级高,首先说明p是一个指针,指向一个int型的一维数组, 数组有3个元素,每个元素是一个int型整数 简单来说,就是int (*p)[3]是指一个指向数组的指针,它其实还是一个指针,只不过是指向数组而已 而int *p[3] [ ] 优先级高,先与p结合成为一个数组,再由int*说明这是一个整型指针数组,指针数组本身就是个数组,只不过这个数组里存放的不是int 不是char,而是一个指针类型( int*,char* ),也就是就是地址 所以:数组指针:它是一个指针,它指向一个数组 指针数组:它是一个数组,数组的元素都是指针
这里我们可以这样理解: 数组指针 :指向数组的指针 本质是指针 指针数组 :存放指针的数组 本质是数组 也就是什么在后面,他就是什么类型,比较容易理解把 数组指针的定义即使用: int (*p)[3]; //指向一个数组,数组有3个元素,每个元素是一个int型整数 int a[3][3]; p= a; //将该二维数组的首地址赋给p,也就是a[0]或&a[0][0] p++; //该语句执行过后,也就是p=p+1;p跨过行a[0][]指向了行a[1][] p= &a; //这样是错误的 如果为一维数组 int (*p)[3]; //定义数组指针 int a[3]; //定义一维数组 p= &a; //需要&符 p= a; //这样是错误的这里为什么与要加上&呢 因为 p 本质是一个指向整个数组的指针 &a 代表的是整个数组的首地址,指向了整个数组 a代表的是数组首个元素的地址 是一个单纯的地址 (&a 与 a在数值上相同) 而在C语言中,赋值符号“=”号两边的数据类型必须是相同的,p= &a; 是将整个数组的首地址赋值给p而p= a; 则是将一个指针赋值给p 这样子是错误的 同理,如果是二维数组 a则直接表示一个一维数组的首地址(a[][3]) 而&a 则表示一个二维数组的首地址 所以赋值会出现错误 数组的定义即使用: int *p[3]; //定义指针数组 int a[3]; p[0] = a[0]; //p第一个元素存放a的第一个元素的地址 p[1] = a[1]; //p第二个元素存放a的第二个元素的地址有时我们需要用到一些特定的数值作为参数调用时,需要保存多个地址的时候 ,就可以使用指针数组 #include char *(number)[10]={"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"}; //里面都是对应汉字的首地址 char number2[10]={"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"}; //直接定义是错误的 char number3[3]; void transform(char *num); int main() { transform(*number); //这里需要* transform(number3); } void transform(char *num) { }
|
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |