本帖最后由 jackz007 于 2022-8-27 17:33 编辑
b 是常数指针,& b 就是 b 本身,如果换成真正的指针变量 p 就可以看出区别来了,& p 就不再是 p 了,试试下面的代码#include <stdio.h>
int main(void)
{
int b[5] = {1,2,3,4,5} , * p = b ;
printf("b = %p\n" , b) ; // 打印常数指针 b 的数值
printf("& b = %p\n" , & b) ; // b 是常数指针,其地址就是指针本身
printf("*& b = %p\n" , * & b) ; // 打印常数指针 b 的数值
printf("p = %p\n" , p) ; // 打印指针变量 p 的数值
printf("& p = %p\n" , & p) ; // 打印指针变量 p 的储存地址
printf("*& p = %p\n" , * & p) ; // 打印指针变量 p 的数值
printf("b[0] = %d\n" , * p) ; // 打印 b[0] 的数值
printf("b[0] = %d\n" , p[0]) ; // 打印 b[0] 的数值
printf("b[4] = %d\n" , * (p + 4)) ; // 打印 b[4] 的数值
printf("b[4] = %d\n" , p[4]) ; // 打印 b[4] 的数值
}
编译、运行实况:D:\[00.Exerciese.2022]\C>g++ -o x x.c
D:\[00.Exerciese.2022]\C>x
b = 0022FF3C
& b = 0022FF3C
*& b = 0022FF3C
p = 0022FF3C
& p = 0022FF38
*& p = 0022FF3C
b[0] = 1
b[0] = 1
b[4] = 5
b[4] = 5
D:\[00.Exerciese.2022]\C>
从上面的输出结果可以看出,b 的 3 个输出是一样的,而 p 是有区别的。这就是常数指针和指针变量的区别。 |