指针经典问题
问题1:指针的本质是变量,那么是否可以再定义指针保存另一个指针地址?
多级指针
- 可以定义指针的指针保存其他指针变量的地址
例子:Type v;
Type* pv = &v;
Type** ppv = &pv;
#include <stdio.h>
int main(int argc, char const *argv[])
{
int a = 0,b = 1;
int* p = &a;
int** pp = &p;
**pp = 2;
*pp = &b;
*p = 3;
printf("a = %d, b = %d\n",a,b);
return 0;
}
问题2:一维数组的类型为Type*,那么二维数组的类型是否为Type**?
#include <stdio.h>
int main(int argc, char const *argv[])
{
int a[2][2] = {{1,2},{3}};
int (*pa)[2] = a;
printf("a = %p, pa = %p",a,pa);
return 0;
}
答: 因而二维数组的类型不是Type**,而是C Type(*)[]
总结
- 可以定义指向指针的指针(保存指针变量的地址)
- 一维数组名的类型Type*(变量地址类型)
- 二维数组名的类型Type(*)[N](数组地址类型)
- 不要从函数中返回局部变量或者函数参数的地址
3641

被折叠的 条评论
为什么被折叠?



