关于常量指针和指针常量,为什么下面这个程序可以正常运行?在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还能修改正运行的其它进程的内存里面的所谓常量呢!