xjy99 发表于 2017-8-5 10:40:17

关于指针和常数的疑问

为什么报错?

xjy99 发表于 2017-8-5 10:45:55

   
想验证Kotori前辈的笔记,结果出错了
"2)在编程中要注意左值要比右值更严格,至少在同一级别。下方代码中左值*p没有被限制,因此可以通过p去修改b的值,这样把b定义为常量的意义,也会产生安全问题。const int b = 1;int *p = &b;*p = 2;"

ba21 发表于 2017-8-5 11:21:32

1,常量不能更改。
2,指针指向的常量,不能通过指针更改。
3,指针指向一个常量;指针本身里面存放的地址可以更改。

xjy99 发表于 2017-8-5 12:28:49

ba21 发表于 2017-8-5 11:21
1,常量不能更改。
2,指针指向的常量,不能通过指针更改。
3,指针指向一个常量;指针本身里面存放的地 ...

请看第二张图。。

ba21 发表于 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;

xjy99 发表于 2017-8-5 13:01:59

ba21 发表于 2017-8-5 12:41
慢慢琢磨

const int price = 520;


你没懂我意思:
我是这样写的“*p”

ba21 发表于 2017-8-5 13:03:38

xjy99 发表于 2017-8-5 13:01
你没懂我意思:
我是这样写的“*p”

我认为你没有仔细学习。还有没有认真看我给你和答复。
{:10_278:}

xjy99 发表于 2017-8-5 14:03:07

ba21 发表于 2017-8-5 13:03
我认为你没有仔细学习。还有没有认真看我给你和答复。

{:10_245:}听前辈一席话,胜吃十年的盐啊。。。真真加深了我对指针的理解。不过我疑惑的是,理论上,p指针未被const修饰,p的指向可以修改,我现在却连传址都无法传,这不科学

ba21 发表于 2017-8-5 14:40:00

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

那是你的理论。不是C的理论。{:10_264:}

xjy99 发表于 2017-8-6 07:05:27

本帖最后由 xjy99 于 2017-8-6 07:47 编辑

ba21 发表于 2017-8-5 14:40
那是你的理论。不是C的理论。

感谢,已解决,上机,连了下vc6。。。基本上一样的代码。。。应该是c4droid非要我const int *p=&b

ba21 发表于 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 。但是为了什么要这么做呢?如果开发出一个程序,这台电脑能用,下次换台电脑,或移植到别的系统上就一大把问题;何必要这样,也证明不了什么{:10_272:}

xjy99 发表于 2017-8-6 10:00:13

ba21 发表于 2017-8-6 09:43
C:%users\Administrator\Desktop\Ctest\1.c(6) : warning C4090: 'initializing' : different 'const' qu ...

{:10_266:}
c4droid直接给我fatal error
vc6无warning
前辈用的是?

xjy99 发表于 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,求前辈帮忙
页: [1]
查看完整版本: 关于指针和常数的疑问