南宁培训网站建设/seo权重优化
引言
- 这一节是指针和数组的碰撞,而之前关于指针的例子都是直接用一个变量表明,就像下面
#include<stdio.h>
int main(){int number = 100;//这里其实也可以写为 int *p = &number; int* ptr = &number; printf("number 的地址为:%p\n",ptr);printf("number 的地址为:%p\n",&number);printf("number 的值为:%d\n",*ptr);}输出的结果:
number 的地址为:000000FDDD19F744
number 的地址为:000000FDDD19F744
number 的值为:100
- 那我们参照上面,把 number 换成数组 var ,对比学习。
#include<stdio.h>
int main(){int var[] = { 12, 34, 56, 78, 90 };//这里其实也可以写为 int *p = var; int* ptr = &var; printf("var 的地址为:%p\n",ptr);printf("var 的地址为:%p\n",&var);printf("var 的值为:%d\n",*ptr);}输出的结果:
var 的地址为:000000C0421DFA28
var 的地址为:000000C0421DFA28
var 的值为:12
对比起来看,其实你已经学会了大半,现在轮到我来补充
- var 数组中有五个数,输出的地址只有一个,难道五个数全部住在了一起,还是另有隐情?那就用遍历揭晓答案,显然五个数的地址各不一样,只有第一个数的地址与数组的地址相同,证明指针只保存下标为0的元素的地址,其余的一概不管。
- var 数组中有五个数,输出的 var 值只有一个,且是下标为0的元素,其余的一概不管。
int* ptr = &var;
也可以写成int *p = var;
,也就是把 & 去掉,但 number 可不能这么玩。虽然不报错,但是指针指向的明显不是 number 的地址。而且,*ptr_2 也没有输出 number 的值。- 不仅定义的时候可以把 & 去掉,输出的时候也可以,结果一样。
总结
你可以将两者对比学习,只需注意他们之间的不同即可。