C/C++ code
char * m = " hello " ; * (m + 1 ) = ' s ' ; for (; * m != ' \0 ' ;m ++ ){ printf( " %c\n " , * m); }
但是出运行时错误。----------------------------------------------------------我用数组下标的方式是可以修改的: - C/C++ code
- int i = 0 ; char w[] = " hello " ; w[ 1 ] = ' s ' ; while (w[i] != ' \0 ' ){ printf( " %c\n " ,w[i]); i ++ ; }答复一:char *m = "hello";"hello"保存在静态数据区,该数据不能修改.由指针m指向. 不能通过指针m来修改静态数据区的值.char w[] = "hello";"hello"保存在栈空间数组里. 数组名为w, 函数名为数组的首地址.可以通过w[i]='a', 或*(w+i)='a'的形式来修改数组内容.疑问:这种说法是错误的。如下:static int a = 10; int *b = &a; *b = 20; cout<<a<<endl;输出结果为20.我们依然通过指针修改了存储在静态存储区里的数据源。//---------------------------------------------------答复二:字符串“hello”本身就是一个常量字符指针,而对于指针m,无非就是一个地址的拷贝,也就是“hello”地址的拷贝,相当于m指向一个字符串常量,字符串常量是不予许改变的!而对于w[]来说就不一样了,虽然hello本身是常量,不过此时拷贝给w[]的不是地址,而是内容,也就是“hello”,也就是w本身拥有一个自己的hello副本,可以对其进行想要的合法操作,比如改变等!!回复三:char *m = "hello";"hello"保存在文字常量区,该数据不能修改,默认有只读属性.由指针m指向. 不能通过指针m来修改此值.char w[] = "hello";"hello"保存在栈空间数组里. 数组名为w, 函数名为数组的首地址.可以通过w[i]='a', 或*(w+i)='a'的形式来修改数组内容.