这个问题应该是C语言里的常见基础问题了,今天又理解了一遍,写个笔记复习。
1.数组指针
原来我理解的数组指针就是指向数据的指针嘛,就是这样的
- </pre><pre name="code" class="cpp">int a[] = {1,2,3};
- int *p;
- p = a;
原来应该是这样的
- int a[2][3] = {{1,2,3},{4,5,6}};
- int (*p)[3];
- p = a;
2.指针数组
这个好理解一些,重点还是数组,数组的元素都是指针。
- int a[] = {1,2,3};
- int *p[3];
- p[0] = &a[0];
写了一段代码测试了一下各种情况
- //下面代码主要是学习 数组指针和指针数组
- int main()
- {
- int a[2][3]={{1,2,3},{11,22,33}};
- int b[3] = {111,222,333};
- int *p1;
- int (*p2)[3];//数组指针
- int (*p22)[4];//数组指针
- int *p3[2];//指针数组
- char *s[]={"hello","the","world hi"};
- char **chp;
- char *c = (char *)malloc(10);
- // p1 = a ;//不能将 int(*)[3]类型的值 赋值给 int* 类型的实体
- p1 = b;
- p2 = a;
- // p22 = a ;//不能将 int(*)[4]类型的值 赋值给 int(*)[3] 类型的实体
- // p3 = a;//类型不匹配
- p2 = &a[1]; //可以,多维数组的每行的首地址 都是一个数组指针
- p2 = &a[0];//与 p2 = a 等价
- return 0;
- }