const int *p与int *const p的区别

本文只是一篇学习笔记,是看了《彻底搞定C指针》中的相关篇幅后的一点总结,仅此而已!

一、先搞清const int *p与int const *p的区别

它们的区别就是:没有区别!!

无论谁在前面都没有影响!所以const int *p与int const *p用法一样!


二、const int *p的用法

#include <stdlib.h>
#include <stdio.h>
#include <string.h>

int main(int argc, char **argv)
{
	int test1 = 1;
	int test2 = 2;
	const int *p;
	
	p = &test1;
	p = &test2;
	test2 = 3;
	//*p = 4;     error: assignment of read-only location ‘*p’
	printf("%d\n", *p);
	
	return 0;
}

执行结果 :3 ,这个好理解,如果加入被我注释掉的那一行就会报错,编译通不过,我用的是gcc version 4.4.3。也就是说*p是常量,不可更改,但指针p还是变量,你想怎么 变都可以。


三、int *const p的用法

#include <stdlib.h>
#include <stdio.h>
#include <string.h>

int main(int argc, char **argv)
{
	int test1 = 1;
	int test2 = 2;
	int *const p = &test1;  //只能在声明的时候就给它赋初值,否则还是会报错的

	//p = &test2;			error: assignment of read-only location ‘*p’
	test1 = 3;
	printf("%d\n", *p);
	
	return 0;
}
执行结果 :3 ,这样用p是常量,也就是说p所指向的地址是不可以更改的,所以当把test2的地址赋值给p时就会报错!但是p所指的地址内容是可以改变的。

三、补充const int *const p

#include <stdlib.h>
#include <stdio.h>
#include <string.h>

int main(int argc, char **argv)
{
	int test1 = 1;
	int test2 = 2;
	const int *const p = &test1;

	//p = &test2;
	//*p = 3;
	printf("%d\n", *p);
	
	return 0;
}
执行结果 :1,这个就相当于以上两种情况的混合体,p是常量,所以不能把test2的地址赋给p;同时*p也是常量,所以*p的内容不可更改!



  • 16
    点赞
  • 61
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值