开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第24天,点击查看活动详情
注意:当定义了一个指针int p;之后对其进行赋值p=12;(这种行为是错误的)此时p中还没有赋予任何的地址,所以此时在内存中,p中会是一堆乱七八糟的数字,当我们进行*p=12;时,就会将12放在那一堆乱七八糟的数字对应的地址里。
传入函数的数组成了什么
传入一个普通变量,参数接收到的是值;
传入一个指针,参数接收到的也是值,不过这个值代表地址,
那数组是什么?
函数参数表中的数组,实际上是一个指针,所以说:sizeof(a)==sizeof(int *);但是可以用数组的运算符[]进行计算。
p[0]的解释:有一个变量t=2,有一个指针p得到了t的地址,所以指向t,*p就是p所指向变量的值,那么p[0]的意思就是将p所指的地方做为一个数组,即将t所在的地方看作为t[1](长度为1)即为p[0](相当于t[0])。
*运算符可以对指针做,也可以对数组做。int a[]={1,2,3,};->*a=1;
数组变量是const的指针,所以不能被赋值。int a[]<==>int * const a
指针与const
const加在变量前表明此变量不能被修改,如果指针是const,表明一旦得到了某个变量的地址,不能再指向其它变量。int *const q=&i;//q是const,*q=26;//在已经有前几句代码的情况下是OK的,i不是const,q++;//错误,因为指针是const。
所指是const
表示不能通过指针去修改那个变量(并不能使那个变量成为const):
const int *p=&i;
*p=26;//错误(*p是const)
i=26;//OK
p=&j;//OK
判断哪个被const了的标志是const在* 前面还是后面,在前面指不能通过指针修改变量,在后面指指针不能被修改。