常量指针和指针常量的区别

在我们初学指针的时候,对于指针的概念都非常的模糊不清,而且对一些指针类的区别更加的模糊,今天我把自己学到的一点常量指针和指针常量的区别说一说,可能自己也不是很能区分,若有问题欢迎提出。
我们先看一个常量指针的简单程序

#include<stdio.h>
#include<stdlib.h>
int main()
{                           //常量指针(被指向的对象是常量)
 int a=10;
 int b=20;

 const int*p=&a;
 printf("%d\n",*p);
 p=&b;
 printf("%d",*p);
 system("pause");
 return 0;
}

这是一个简单是指针程序,我们来分析一下什么是常量指针,首先const修饰的是*p,我们就先这样理解,像这种形式的就是常量指针,然后我们分析代码,我们先使指针指向了a,然后把数输出来,再使指针指向b在输出来,我们先看看结果
在这里插入图片描述
先后输出了,a,b,两个量的值,所以指针常量指向一个单位后,还可以指向别处,因为指针本身是一个变量,可以指向任意的地址,而常量指针指向的对象是不能通过这个指针来改变的比如下面这个代码的输出

#include<stdio.h>
#include<stdlib.h>
int main()
{                           //常量指针(被指向的对象是常量)
 int a=10;
 int b=20;

 const int*p=&a;
 *p=*p+1;                       //我们新加的东西
 printf("%d\n",*p);
 p=&b;
 printf("%d",*p);
 system("pause");
 return 0;
}

结果是报错了,
在这里插入图片描述
但是我们可以通过改变变量a,b的值改变指针指向地址内的值

#include<stdio.h>
#include<stdlib.h>
int main()
{                           //常量指针(被指向的对象是常量)
 int a=10;
 int b=20;
 a=9;
 const int*p=&a;
 printf("%d\n",*p);
 p=&b;
 printf("%d",*p);
 system("pause");
 return 0;
}

我们改变了a的值使指针指向的值发生改变
在这里插入图片描述
第一个输出变成了,重新赋值的9,所以常量指针可以通过改变指向的对象的声明改变。
叫做常量指针是限制了通过这个指针修改变量的值。

然后我们再看看指针常量
一个简单指针常量的代码:

#include<stdio.h>
#include<stdlib.h>
int main()                         //指针常量(指针本身是常量)
{
 int a=10;
 int *const p=&a;
 printf("%d\n",*p);
 *p=*p+1;
 printf("%d",*p);
 system("pause");
 return 0;
}

首先我们来看,与前面不同是是,在结构上const修饰的是p而不是p,这就大概意味着这是一个指针常量,然后修饰了p,可以理解为p本身是一个常量,用指针来修饰他,而且上面的常量指针p为变量,上面测试了,可以指向不同是地址,我们来看看输出结果
在这里插入图片描述
这里可以看出与上面的不同,他可以在指针上面进行运算,说明的是他指向的地址的内容可以通过指针来变换,而常量指针却不能,但是他的地址是不能够变化的,因为指针为常量。
总结一下就是常量指针结构为const
p ,const 修饰p。
指针常量是int
const p,const修饰的是p。
常量指针是
1:指向的对象不能通过这个指针来修改,但可以通过上述的声明等修改。就是值不能变。
2:指针可以指向别处,因为指针本身为变量,可以指向任意地址。
指针常量是
1:本身的指针是个常量!
2:指向的地址可以不能够改变,但是指向的地址的内容的值可以改变。

(个人学习到的,如果有不对和不全面请谅解,或者直接告诉我修改。)

猜你喜欢

转载自blog.csdn.net/qq_43604084/article/details/84308117
今日推荐