首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

关于恒量指针和指针常量,为什么下面这个程序可以正常运行

2013-12-10 
关于常量指针和指针常量,为什么下面这个程序可以正常运行?在VS 2008下编译运行没问题,输出的三个数分别是7

关于常量指针和指针常量,为什么下面这个程序可以正常运行?
在VS 2008下编译运行没问题,输出的三个数分别是77,99,99

把main()的第一行
const IntPointer p=new int;
改成 
IntPointer const p=new int;
也是一样。无法理解。好像跟网上说的不一样啊。


// Program to demonstrate the way call-by-value parameters
// behave with pointer arguments.

#include <iostream>
using namespace std;

typedef int* IntPointer;

void sneaky(const IntPointer temp);

int main()
{
const IntPointer p=new int;
*p = 77;
cout<<"Before call to function *p == "<<*p<<endl;
sneaky(p);
cout<<"After call to function *p == "<<*p<<endl;

getchar();
}

void sneaky(const IntPointer temp)
{
*temp = 99;
cout<<"Inside function call *temp == "
<<*temp<<endl;
}

[解决办法]
const IntPointer p=new int;
改成 
IntPointer const p=new int;
意思是一样的 都是
int* const p
p = Error
*p = OK
不知道你有什么好疑问的

另外你有new 忘记 delete 了
[解决办法]
http://www.cnblogs.com/witty/archive/2012/04/06/2435311.html
好好看看吧.


const IntPointer p=new int;
改成 
IntPointer const p=new int;
也是一样。无法理解。好像跟网上说的不一样啊

因为都是在初始化, 肯定效果一样.  要区分开初始化与赋值.
如果
IntPointer const p=new int;
改成
IntPointer const p= NULL;
p = new int
你看还能通过不.


常量指针 是指向的内容是常量,而指针本身可以指向其它地方.
指针常量 是指针本身是常量,不能改变指向, 而其指向的内容能修改.
[解决办法]
测试了下, 楼主这种写法。。。等于 int *const p, p本身是常量 而不是p指向的内容。。。但是为嘛是这样。。。被typedef搞蛋疼咯 为啥不是int const *p? 
[解决办法]
typedef不同于define的区别吧,把IntPointer当成一种普通类型看就清楚了,const修饰的都是p ,而不是int
[解决办法]
typedef 用于定义类型。
定义后类型就不在分割了,是一个整体了,指针和指向的类型被捆绑到一起了。
 int *const p  中 const 用于定义指针,而不是指针指向的数据。
int const *p  分割了指针和类型,const 用于定义指针指向的数据。
typedef int* IntPointer;  IntPointer 是完整的类型 int *

正像 int const <==> const int 一样,数据是常量。

IntPointer const<==>const IntPointer; 指针这个数据是常量。

要用typedef定义 常量指针,只能是 
typedef const int* constIntPointer;



[解决办法]
不要纠结各种常量了,这个世界上唯一不变的就是变化。用API WriteProcessMemory还能修改正运行的其它进程的内存里面的所谓常量呢!

热点排行