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

关于常量指针和指针常量的有关问题

2013-10-17 
关于常量指针和指针常量的问题1.指针常量改变指向的值。int main() {char *str1{Hello}char *str2{He

关于常量指针和指针常量的问题
1.指针常量改变指向的值。
int main() {
char *str1={"Hello"};
    char *str2={"Hello World"};
    char * const ptr1 =str1 ;
    cout<<ptr1<<endl;
    *ptr1='A';
    printf("%c \n",*ptr1);
    cout<<ptr1<<endl;
    return 0;
 }

以上程序,编译可以通过。但是运行时候会出现问题。
First-chance exception at 0x0033150f in test1.exe: 0xC0000005: Access violation writing location 0x00337818.
Unhandled exception at 0x0033150f in test1.exe: 0xC0000005: Access violation writing location 0x00337818.

那么,请问如何改变指针常量所指向的值?


2.如何更新常量指针的值。
int main() {
     char *str1={"Hello"};
     char *str2={"Hello World"};
     const char *ptr1 =str1 ;
     cout<<ptr1<<endl;
     str1="no longer hello";
     cout<<ptr1<<endl;
     return 0;
 }

输出是:
Hello
Hello
为什么会这样子? 指针常量?常量指针?改值
[解决办法]
1 *ptr1 = 'A'; //错了,修改了静态区(可读)的内容
   通过修改ptr1的指向的地址!而不能在原来的地址基础上修改它的内容!

2 首先是str1指向"Hello"这个常量区首地址,然后通过复制地址操作
  ptr1也指向了"Hello"这个常量区的首地址,然后又把"no longer hello"的首地址的值赋值给str1
 ptr1还是指向"Hello"的首地址,所以结果是这样的!
[解决办法]
你理解错了,首先你打印的是str1本身的地址而又不是它指向的地址,它本身指针的地址没有变化,
只是它指向的地址改变了而已


cout<<(void *)str1<<endl;
//请在你改变str1的两处加上这个,打印它指向的地址,肯定是发生变化了的!

热点排行