数组指针和指针数组
2018-03-01 23:55
246 查看
1.数组指针
2.指针数组
1.数组指针
数组指针:即“数组的指针”,本质为指针,只不过这个指针指向数组而已 。如 int (*p)[4] ,说明这个指针p 指向了一个里面有4个int元素的数组
由于 ()的优先级比 []高,*和p先结合,所以 (*p)[4] 本质为指针
#include <stdio.h>
int main () {
int a[3]={1,2,3};
int (*p)[3];
p=&a;
printf("%p\n",*p); //打印结果:0x7ffc6f432570
printf("%p\n",p); //打印结果:0x7ffc6f432570
printf("%p\n",p[0]); //打印结果:0x7ffc6f432570
printf("%d\n",**p); //打印结果:1
printf("%d\n",*p[0]); //打印结果:1
return 0;
}
第7,8,9行,打印的结果一样的原因:
p = &a 表示 p变量装着 数组 a 的地址。 所以 p 为数组 a 的地址。而 *p 就是指数组a本身,当如何标识一个数组呢?就是用数组的首元素地址来标识一个数组。
而数组的首元素地址 和 数组的地址 在值上是一样的。所以 *p 和 p 的值也是一样的。
p 既然是数组a的地址,那 p[0] 自然也是数组首元素的地址了。所以 p 和 *p 和 p[0] 是一样的
当 *p 表示的数组首元素地址时,**p 自然就是表示首元素本身(即首元素的值)。
*p[0] ,因为 []优先级比较高, p[0] 表示首元素地址,所以 *p[0] 就是表示首元素本身。所以 **p = *p[0]
2.指针数组
指针数组:即“指针的数组” ,本质为数组,只不过数组里装的是指针。如 int *p[4] 表示此数组里有4个元素,这4个元素的类型都是 int* 类型。
由于 []的优先级比 * 高,所以 *p[4] 本质为数组
#include <stdio.h>
int main () {
int a = 1;
int b = 2;
int *p[2]; //指针数组
p[0] = &a; //p[0] 装 a的地址
p[1] = &b; //p[1] 装 b的地址
printf("%d\n",*p[0]); //打印结果:1
printf("%d\n",*p[1]); //打印结果:2
return 0;
}
额外:
数组指针 和 指针数组 若变量名一样(例如都为p),他们的写法就只有符号优先级的区别,如:
int *p[3] ------指针数组
int (*p)[3] ------数组指针
2.指针数组
1.数组指针
数组指针:即“数组的指针”,本质为指针,只不过这个指针指向数组而已 。如 int (*p)[4] ,说明这个指针p 指向了一个里面有4个int元素的数组
由于 ()的优先级比 []高,*和p先结合,所以 (*p)[4] 本质为指针
#include <stdio.h>
int main () {
int a[3]={1,2,3};
int (*p)[3];
p=&a;
printf("%p\n",*p); //打印结果:0x7ffc6f432570
printf("%p\n",p); //打印结果:0x7ffc6f432570
printf("%p\n",p[0]); //打印结果:0x7ffc6f432570
printf("%d\n",**p); //打印结果:1
printf("%d\n",*p[0]); //打印结果:1
return 0;
}
第7,8,9行,打印的结果一样的原因:
p = &a 表示 p变量装着 数组 a 的地址。 所以 p 为数组 a 的地址。而 *p 就是指数组a本身,当如何标识一个数组呢?就是用数组的首元素地址来标识一个数组。
而数组的首元素地址 和 数组的地址 在值上是一样的。所以 *p 和 p 的值也是一样的。
p 既然是数组a的地址,那 p[0] 自然也是数组首元素的地址了。所以 p 和 *p 和 p[0] 是一样的
当 *p 表示的数组首元素地址时,**p 自然就是表示首元素本身(即首元素的值)。
*p[0] ,因为 []优先级比较高, p[0] 表示首元素地址,所以 *p[0] 就是表示首元素本身。所以 **p = *p[0]
2.指针数组
指针数组:即“指针的数组” ,本质为数组,只不过数组里装的是指针。如 int *p[4] 表示此数组里有4个元素,这4个元素的类型都是 int* 类型。
由于 []的优先级比 * 高,所以 *p[4] 本质为数组
#include <stdio.h>
int main () {
int a = 1;
int b = 2;
int *p[2]; //指针数组
p[0] = &a; //p[0] 装 a的地址
p[1] = &b; //p[1] 装 b的地址
printf("%d\n",*p[0]); //打印结果:1
printf("%d\n",*p[1]); //打印结果:2
return 0;
}
额外:
数组指针 和 指针数组 若变量名一样(例如都为p),他们的写法就只有符号优先级的区别,如:
int *p[3] ------指针数组
int (*p)[3] ------数组指针
相关文章推荐
- 指针 指针数组 指针数组的指针 数组指针 数组指针的数组 函数指针 指向函数指针数组的指针
- 指针数组 数组指针
- 常量指针、指针常量、指针函数、函数指针、指针数组、数组指针区别在哪里?
- C语言复习 -- 指针数组和数组指针
- 【笔试面试知识点查缺补漏深入理解之C与C++篇】C语言中的指针数组与数组指针
- 数组指针与指针数组
- C语言数组指针(指向数组的指针)
- 函数指针、指针函数、指针数组、数组指针
- 数组指针与指针数组的区别
- typedef的学习 数组指针与指针数组的差异
- 指针数组 数组指针 函数指针 堆中分配
- 指针数组、数组指针、函数指针、函数指针数组……概念理解
- C语言中的指针数组和数组指针
- [转] 彻底了解指针数组,数组指针,以及函数指针,以及堆中的分配规则
- 易混淆概念(一)指针数组与数组指针
- 指针数组与数组指针
- 指针数组和数组指针
- 浅析指针数组,数组指针,函数指针,函数指针数组,指向函数指针数组的指针
- 彻底了解指针数组,数组指针,以及函数指针,以及堆中的分配规则(转)
- C++ 指针数组,数组指针,以及函数指针,以及堆中的分配规则