博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
c语言常量指针赋值给变量指针导致警告
阅读量:5034 次
发布时间:2019-06-12

本文共 774 字,大约阅读时间需要 2 分钟。

常量指针定义:常量是形容词,指针是名词,以指针为中心的一个偏正结构短语。这样看,常量指针本质是指针,常量修饰它,表示这个指针乃是一个指向常量的指针。指针指向的对象是常量,那么这个对象不能被更改。常量指针的使用要注意,指针指向的对象不能通过这个指针来修改,可是仍然可以通过原来的声明修改,也就是说常量指针可以被赋值为变量的地址,之所以叫做常量指针,是限制了通过这个指针修改变量的值。

在C/C++中,常量指针是这样声明的:

1)const int *p;

2)int const *p;

例子:

int a = 5;

const int b = 8;

const int *c = &a; // 这是合法的,非法的是对c的使用

*c = 6; // 非法,但可以这样修改c指向的对象的值:a = 6;

const int *d = &b; // b是常量,d可以指向b,d被赋值为b的地址是合法的

我在这里想重点说明的是,在一个函数的定义里,将一个常量指针赋值给变量指针,然后通过这个变量指针是可以修改常量指针指向的对象的。

但是,编译器会给出一个警告:warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]

  p=a;
   ^
void testp(const int *a,int n)
{
  int *p;
  p=a;
  p[0]=12;     //修改了数组a[0]的值,而编译器只是给了一个警告,所以,警告也要足够重视。
  a[0]=12;     //直接修改a,编译器会报错,因为定义了const属性。
}

转载于:https://www.cnblogs.com/litifeng/p/5831076.html

你可能感兴趣的文章
idea主要设置大纲图
查看>>
Codeforces Round #167 (Div. 1 + Div. 2)
查看>>
Oracle 关闭正在执行的job
查看>>
Istio调用链埋点原理剖析—是否真的“零修改”分享实录(下)
查看>>
Question 关于js正则的问题,why????????????????
查看>>
day04 python_selenium
查看>>
关于 hover 时候闪烁的问题
查看>>
加密学教程(Cryptography Tuturials)文件夹
查看>>
90后大学生卖煎饼月收入4k
查看>>
MongoDB的查询索引
查看>>
u-boot简单学习笔记(二)——AR9331 uboot.lds分析
查看>>
文件操作:根据现有类生成所需要的类
查看>>
pdf中内嵌字体问题
查看>>
Debian搭建WordPress
查看>>
Xstream 解析xml文件内容
查看>>
JavaScript正则表达式方法总结
查看>>
pub/sub的实际应用总结
查看>>
多媒体标签
查看>>
TCP的应用编程服务器端重要笔记
查看>>
【题解】 Codeforces 919F A Game With Numbers(拓扑排序+博弈论+哈希)
查看>>