我这边给你打个比喻,就比如我们去拿一样东西
而拿这个东西呢,需要两个步骤
1 这个东西所在的地址 2 根据地址去拿它
其中 地址呢,就是指针 ,而拿它呢,就是根据这个地址去拿它,也就是访问指针
比如 c的指针
int a = 10; int *b = &a,int c = *b;
这边呢,我们拿a这个值,怎么拿呢?
1 首先得获得这个a地址,也就是&a
2 然后呢,把这个地址给指针呀,好让它找拿呀,也就是 int *b = &a,把a的
地址给了指针b
3 访问指针*b,也就相当于,指针根据这个地址拿到了a的值,*b 也就相当于10了
4 最后了 int c =*b ,也就相当于 int c = 10;
关于 指针的写法,有常见的两种
比如 a[0],*a
看到这里 ,你是不是感觉a[0]的写法,是不是和数组和字符串很像,其实它们的确有很多
相像的地方;
比如 int a[]={1,2,3,4,5}; int *b = a;
1 对于,数组来讲,它的名字就是它的首元素地址,我这边直接将数组的首元素地址给指针,当然也可以这么写
b=&a[0],这个地方也是将首元素地址给它,但一个加&,一个没有,是因为数组名本身就是地址,而
a[0]不是地址
2 然后 *b就是根据首地址获得这个地址所有的东西,也就是1,或者你*a,数组名是地址嘛,所以访问它也是可以的
3 然后*(b++),或者b[1],就是获得在原来地址的基础上加上4个字节,访问了第二个元素的地址,得到
2,b[2]访问a第3个元素,b[3]第四个元素
4 结论 b[0]= a [0],b[1] = a [1],b[2]= a[2]
5 所以说,指针和数组字符串,是有千丝万缕的关系,而只要指针用上[]这个中括号,连访问符号*都省了
|