吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3825|回复: 20
收起左侧

[C&C++ 转载] 引用应该可以看成指针常量吧?

[复制链接]
jessylake 发表于 2017-11-22 16:45
void modify(int *const a)      //int *const a 这应该叫指针常量,为什么讲课的老师说是常量指针呢?
{
*a = 300;
}
void modify2(int &a)  
{
a = 300;  
}

int main()
{
int a=10;
modify(&a);
modify2(a);
}

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

NoDocCat 发表于 2017-12-10 11:09
本帖最后由 NoDocCat 于 2017-12-10 11:13 编辑
jessylake 发表于 2017-12-10 07:46
难道const不能被翻译成常量?我觉得“常量”这个意思就是“不可改变”,能够表达const的意思就行

首先, const翻译过来确实是常量的意思
但是const修饰和代码中的字面量 符号常量还是有区别的, 字面量和符号常量编译时会被编译为指令中的立即数, 而const修饰会和变量一样分配到内存中.

另外, 你真的认为const是无法改变的吗?

[C] 纯文本查看 复制代码
#include "stdafx.h"

int main(){
    const int a = 1;
    int *p = (int*)&a;
    *p = 2;

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


你可以试下这段代码, 输出的结果是a = 1, *p = 2
输出a = 1个人推测是因为编译器的优化, 这里被优化为立即数了
但是*p = 2可以说明const int a所在的内存空间被修改了
你也可以拿调试工具去查看一下内存, 看看const int a的变化

很明显, const修饰的只是变量名, 只是说你不能通过这个变量名去修改变量, 不是说这块内存是不变的. 如果你通过其他方式访问到了这块内存, 你依然可以修改这块内存的值
 楼主| jessylake 发表于 2017-11-22 18:34
常量指针:
int const *n;或者是 const int *n;
指针常量:
int *const n;
这里我们将const读作‘常量’,将星号读作‘指针’,按照代码中const和星号的顺序读出来(忽略其他的单词)就正好是两者的正确的名称

我觉得可能是对“常量指针”这四个字的解读不一样造成的,如果按照上面的规则,int *const a就应该叫指针常量,而常量指针是指指向常量的指针,而这位老师把常量指针解读成“作为常量的指针”,所以才会产生冲突。

爱伟琳真太好了 发表于 2017-11-22 18:58
狂気の赤い鳥 发表于 2017-11-22 19:24 来自手机
不可以的,不是一个东西。
 楼主| jessylake 发表于 2017-11-22 19:37
狂気の赤い鳥 发表于 2017-11-22 19:24
不可以的,不是一个东西。

讲课老师是这样总结的:
当我们研究引用的时候,可以把引用当做指针常量去研究,但编程时只需要把引用理解为变量的别名即可
xxp123 发表于 2017-11-22 19:55
不能的,不是一个概念
 楼主| jessylake 发表于 2017-11-22 20:10
xxp123 发表于 2017-11-22 19:55
不能的,不是一个概念

创智播客的C++老师说“当我们研究引用的时候,可以把引用当做指针常量去研究,但编程时只需要把引用理解为变量的别名即可”
你说不能,能否简单说说理由?
pengyao1207 发表于 2017-11-24 13:45 来自手机
int *const a,const限定的是a这个指针。int const *a或const int * a,const限定的是a指向的地址。至于怎么读,我并不在意。另外,用const修饰只是让你不能直接修改。
 楼主| jessylake 发表于 2017-11-24 15:31
pengyao1207 发表于 2017-11-24 13:45
int *const a,const限定的是a这个指针。int const *a或const int * a,const限定的是a指向的地址。至于怎么 ...

这个我倒是懂,只是看网上说那种从左往右读,即const读常量,*读指针,说比较合理,
比如 int const *a 读常量指针;
int *const a 读指针常量,这里指针a就是常量,但不少人,包括我们老师读常量指针,正好跟上面那句混淆了
xxp123 发表于 2017-11-27 10:25
jessylake 发表于 2017-11-22 20:10
创智播客的C++老师说“当我们研究引用的时候,可以把引用当做指针常量去研究,但编程时只需要把引用理解 ...

指针常量主要作用保存地址,引用它是要改变值得,最终要变化。这么理解通俗,实际项目中最好要区别一下
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-15 13:42

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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