|  | 
 
 发表于 2022-8-27 17:29:26
|
显示全部楼层 
| 本帖最后由 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 是有区别的。这就是常数指针和指针变量的区别。
 | 
 |