c++指针问题麻烦大佬们给我解释一下

int a [3]={1,2,3}
int b [3]={a,a+1,a+2}
int
(*c)[3]=&b
中为什么&b是一个二级指针而不是三级指针
因为&b指向b而b又指向b[0],b[0]是一个指针
然而&b是二级指针这是为什么图片说明图片说明

c++

5个回答

b是个数组,也可以理解为指针常量,即b本身这个指针指向的地址固定了,不能像int *p这种 ,可以更改指向,
b保存的是个一级指针,所以他是二级指针
至于&b其实跟b你打印一下是一样的,都是这个数组b的首地址,只是步长不一样,这个是数组的特性,
严格的说&b不是指向b[0],你可以&b+1 打印地址就知道了,它是指向整个数组,只是整个数组的地址跟b[0];地址一样

b[0]是一个指针

谁告诉你b[0]是指针的,那b[1]也是指针啰?

qq_33971770
四月归还 少打了个*号
接近 2 年之前 回复

应该是b数组的定义有问题吧,你的定义里是int类型的数组,会自动把a,a+1,a+2这些指针强制转换成int类型吧
如果换成int * b[3]的话,应该&b就是三级指针了

qq_33971770
四月归还 少打了两个*
接近 2 年之前 回复

int (*c)[3]=&b 该行代码意为定义一个含有三个整型变量的指针数组,并且指针指向整形数组b的首地址,

不能这样理解的,很明显b是一个二维数组,b是这个二维数组的数组名,直接打印它会得到它的地址,也就是&b,&b就是表示这个二维数据的地址,不管是b还是&b,都没有是指针的说法,就表示数组名,或者地址,符号 “*”才是指针。比如说:* b,你可以理解为数组a,它指向数组a第一个元素所在地址,也就是说,你如果打印 * b,出来的结果也是一个地址,且跟b一样,但是如果是**b,那就是元素,一个值,在你这就是a[0]的值1

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!