鱼C论坛

 找回密码
 立即注册
查看: 2901|回复: 12

关于指针和常数的疑问

[复制链接]
发表于 2017-8-5 10:40:17 From FishC Mobile | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
为什么报错?
Screenshot_20170805-103928.png
Screenshot_20170805-103938.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2017-8-5 10:45:55 From FishC Mobile | 显示全部楼层
     
想验证Kotori前辈的笔记,结果出错了
"2)在编程中要注意左值要比右值更严格,至少在同一级别。下方代码中左值*p没有被限制,因此可以通过p去修改b的值,这样把b定义为常量的意义,也会产生安全问题。const int b = 1;int *p = &b;*p = 2;"
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-5 11:21:32 | 显示全部楼层
1,常量不能更改。
2,指针指向的常量,不能通过指针更改。
3,指针指向一个常量;指针本身里面存放的地址可以更改。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-8-5 12:28:49 From FishC Mobile | 显示全部楼层
ba21 发表于 2017-8-5 11:21
1,常量不能更改。
2,指针指向的常量,不能通过指针更改。
3,指针指向一个常量;指针本身里面存放的地 ...

请看第二张图。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-5 12:41:30 | 显示全部楼层
慢慢琢磨

const int price = 520;
const int *pc = &cnum; //pc存放的地址可变

指向常量的指针:
-可以修改为指向不同的常量
-可以修改为指向不同的变量
-可以通过解引用来读到指针指向的数据
-不可以通过解引用修改指针指向的数据

=======================================================

常量指针:(指向非常量的常量指针) int * const p = #
-指针自身不可以被修改
-指针指向的值可以被修改

常量指针:(指向常量的常量指针) const int * const p = &cnum;
-指针自身不可以被修改
-指针指向的值也不可以被修改


=========================================================
指向常量的常量指针:
const int cnum = 520;
const int * const p = &cnum;
const int * const *pp = &p;
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-8-5 13:01:59 | 显示全部楼层
ba21 发表于 2017-8-5 12:41
慢慢琢磨

const int price = 520;

你没懂我意思:
我是这样写的“*p”
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-5 13:03:38 | 显示全部楼层
xjy99 发表于 2017-8-5 13:01
你没懂我意思:
我是这样写的“*p”

我认为你没有仔细学习。还有没有认真看我给你和答复。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-8-5 14:03:07 From FishC Mobile | 显示全部楼层
ba21 发表于 2017-8-5 13:03
我认为你没有仔细学习。还有没有认真看我给你和答复。

听前辈一席话,胜吃十年的盐啊。。。真真加深了我对指针的理解。不过我疑惑的是,理论上,p指针未被const修饰,p的指向可以修改,我现在却连传址都无法传,这不科学
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-5 14:40:00 | 显示全部楼层
xjy99 发表于 2017-8-5 14:03
听前辈一席话,胜吃十年的盐啊。。。真真加深了我对指针的理解。不过我疑惑的是,理论上,p指 ...

那是你的理论。不是C的理论。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-8-6 07:05:27 From FishC Mobile | 显示全部楼层
本帖最后由 xjy99 于 2017-8-6 07:47 编辑
ba21 发表于 2017-8-5 14:40
那是你的理论。不是C的理论。


感谢,已解决,上机,连了下vc6。。。基本上一样的代码。。。应该是c4droid非要我const int *p=&b
big-thumbnail-1501975379884-clipboard.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-6 09:43:51 | 显示全部楼层
xjy99 发表于 2017-8-6 07:05
感谢,已解决,上机,连了下vc6。。。基本上一样的代码。。。应该是c4droid非要我const int *p=&b

C:\Users\Administrator\Desktop\Ctest\1.c(6) : warning C4090: 'initializing' : different 'const' qualifiers

编译器是换了,程序也能执行了。不过还不是有warning 。但是为了什么要这么做呢?如果开发出一个程序,这台电脑能用,下次换台电脑,或移植到别的系统上就一大把问题;何必要这样,也证明不了什么
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-8-6 10:00:13 From FishC Mobile | 显示全部楼层
ba21 发表于 2017-8-6 09:43
C:%users\Administrator\Desktop\Ctest\1.c(6) : warning C4090: 'initializing' : different 'const' qu ...


c4droid直接给我fatal error
vc6无warning
前辈用的是?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-8-6 10:23:18 | 显示全部楼层
本帖最后由 xjy99 于 2017-8-6 10:24 编辑
ba21 发表于 2017-8-6 09:43
C:%users\Administrator\Desktop\Ctest\1.c(6) : warning C4090: 'initializing' : different 'const' qu ...


我xp,在安装mingw时出了点问题,i.e.,我不知道我的gvim怎么连接gcc,求前辈帮忙
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-28 12:48

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表