1、const int *P 、int const *p这两个是一样的功能,以例子来进行说明
例1:#include<stdio.h>
int main()
{
int a=5;
int b=8;
const int *p;
p=&a;
a=10; //假设 我们把这里改为 p=&b;就能顺利执行程序
printf("a=%d,p=%d\n",a,p); //改为 p=&b后;这里输出a=5和b的地址
printf("&a=%d,*p=%d\n",&a,*p); //改为 p=&b后;这里输出a的地址和p=8(b的值)
return 0;
} 编译这个程序会报错
point.c: In function ‘main’:
point.c:18: error: stray ‘\357’ in program
point.c:18: error: stray ‘\274’ in program
point.c:18: error: stray ‘\233’ in program
point.c:19: error: expected ‘;’ before ‘printf’ 为什么呢?
是由于 P是指针变量,里面装载着一个地址,P所指向的量是该地址里的数据(即*p);
const int *P 、int const *p 表示 地址(p里面的内容)可变,该地址里的数据(即*p)不能变。
2、int *const P
例2:#include<stdio.h>
int main()
{
int a=5;
int b=8;
int *const p=&a;
a=10;
printf("a=%d,p=%d\n",a,p);
printf("&a=%d,*p=%d\n",&a,*p);
return 0;
} 编译报错,将 “ a=10;” 改为 “p=&b;” 编译还是报错 ;这就充分说明 int *const P 定义的指针变量在经过第一次初始化(即第一次赋值)后就不能再进行任何的改变。