新微赢技术网

标题: 这样赋值没错?为什么呢? [打印本页]

作者: 一世豪杰    时间: 2009-11-4 02:26
标题: 这样赋值没错?为什么呢?
这样赋值没错?为什么呢?我以为常量不能重新赋值,可是下面的程序可以得到答案
void main()
{
char *p1="aaa";
const char *p2="bbb";
p2=p1;
cout<<p2<<endl;
}
但是如果给常量整型数再次赋值确实不行 ,比如下面的程序,为什么呢?
void main()
{
int a=1;
const int b=2;
b=a;
cout<<b<<endl;
}
作者: 幸福乐园    时间: 2009-11-4 02:26
const int b=2;是常量。不能再赋值。

const char *p2="bbb";是常量指针,不可以写指针地址内的数据,但是好象可以改指针指向的地址
如果改成const char * const p2="bbb";就安全拉
作者: 梦缘o☆无恒    时间: 2009-11-4 02:26
如楼上所说,const int b = 2;表明变量b是一个常量,不能够再对它进行赋值,但语句const char* p2 = "bbb",则只能说明不能通过指针p2修改"bbb"的值,如重新使p2[1] = 'a';但还是可以把指针p2指向其他的地方,如果要想使指针不能指向其他的地方,可以使用这样的语句:char* const p2 = "bbb"; 而如果使用const char* const p2 = "bbb";则达到上面的两个效果,既不能通过指针p2修改后面的值,也不能将指针指向其他的地方。
作者: 斷々弦    时间: 2009-11-4 02:26
区分一下:指针常量和常量指针这两个概念
另外,再理解这下这句:const指针所指对象的值能否修改取决于所指对象类型是否为const
作者: →大虾米々    时间: 2009-11-4 02:26
请帮忙分析这个程序错的原因
#include<iostream>
using namespace std;
void swap(int *p1,int *p2)
{
    int *a;
    *a=*p1;
    *p1=*p2;
    *p2=*a;
}
void main()
{
    int a=5,b=3;
    swap(&a,&b);
    cout<<a<<" "<<b<<" "<<endl;
}
作者: 小新就是我    时间: 2009-11-4 02:26
不好意思 与题无关,发新贴发错了




欢迎光临 新微赢技术网 (http://bbs.weiying.cn/) Powered by Discuz! X3.2