c++引用和指向常量对象指针问题小弟学习c++中有两个问题不懂:1.引用可以引用指针,若行要怎么样做啊2.就是
c++引用和指向常量对象指针问题
小弟学习c++中有两个问题不懂:
1.引用可以引用指针,若行要怎么样做啊
2.就是指向常量的指针问题,比如:char *pchar[]={
"aaa",
"bbb"
};
书上说pchar[0]="dfdfdshff";通不过我可以理解,但是说pchar[0]='x';为什么可以通过编译但是运行会崩溃?按道理说pchar[0]已经指向常量了,就完全不能再被修改了,谢谢各位大哥教我!!
[解决办法]
不会吧,对于
char *pchar[] = { "aaa", "bbb" };
pchar[0] = "dfdfdshff";会通不过?
pchar[0] = 'x'会通过?
[解决办法]
1.举个例子
- C/C++ code
void SwapPointer(int*& pL, int*& pR){ int* pTmp = pL; pL = pR; pR = pTmp;}int main(int argc, char* argv[]) { int iNum1 = 20; int iNum2 = 30; int* pL = &iNum1; int* pR = &iNum2; SwapPointer(pL, pR); return 0; }
[解决办法]
常量指针内容不可以改指向可以改,指针常量内容可以改指向不可以改
pchar[0]只是普通指针,只不过它的内容是放在常量区而已
pchar[0] = "abc";是改指向,不会有问题,原来的空间系统也会自动释放
pchar[0][0] = 'a';编译也可以过,只是运行一般会出错
[解决办法]
按道理说pchar[0]已经指向常量了,就完全不能再被修改了,谢谢各位大哥教我!!这句话有问题吧
、、、、、、、、、、、、、、、、、、、、、、、
pchar[0][2]='a';这样才叫做改常量,知道吗?运行就会出错!
你pchar[0]="xxxxxx";这样只是改变指针的指向,不会有问题
本人的理解,嘿嘿
[解决办法]
顶LS的
[解决办法]
小弟也是刚学C++的,小弟不才,回答你部分问题
1、char *pchar[]={"aaa","bbb"}这不是一个常量,这是一个变量,变量是可以访问、修改,常量是:const char *pchar[]这就是常量,只能访问不能改写。
2、pchar[0]="dfdfdshff",这是修改了指针的内存地址(前提是非常量)。
3、pchar[0]='x',崩溃正常,因为前面你定义的是一个二维字符串数组,但你后面重写的格式也不正确。
本人不才,只是写出自己的观点,不正确请多多指教。
[解决办法]
- C/C++ code
#include<iostream> #include<cstring>using namespace std; int main(void) { char *pchar[]={"aaa","bbb"}; cout<<pchar[0]<<" "<<pchar[1]<<endl; pchar[0]="dfdfdshff"; cout<<pchar[0]<<" "<<pchar[1]<<endl; /* char *pt[]={'X',"age"}; cout<<pt[0]<<endl;*/ return 0;}
[解决办法]
这和编译器有关,我在VC++6.0里面pchar[0]='x';这句编译包错,但改成“x”后就过了。
我个人理解使这样的:“aaa”是字符串可以看成是一个数组,赋值的时候系统会自动的将其地址赋过去。但是“x”s是字符,字符在计算机中也是以二进制数存储的,在赋值的过程当中会不会把字符的ASC码值赋给了Pchar[0],因为地址也是数值形式。这样就会造成编译过,运行不过,因为pchar[0]根本不是‘x’的地址。
当然这和编译器还有关系。
[解决办法]
在VC6.0里编译错误,‘x’是字符,不是字符串,结尾不以'\0'结束,而pchar[0]是char*类型的,'x'是char,当然赋值报错
[解决办法]
改变指针指向的常量是不可行的。但改变指针指向是可行的。
[解决办法]
[解决办法]
不明LZ在说什么
