1>>
#include <stdio.h>
int main(void)
{
char str[]="xyz";
char *ptr=str;
*(ptr+1)=Y;
printf("%s",ptr);
getch();
return 0;
}
我的问题是:
当执行*(ptr+1)=Y;时指针ptr应该指向了"xyz"的第二个字节,即y.赋过值后也即是Y.
所以当printf("%s",ptr);时!
为什么不是从ptr所指向的地址开始打印直到遇到\0呢?
2>>
char heart[]="i love you";
heart[7]=M;
或者:
*(heart+7)=M;
但:
char *word="frame";
若:
word[1]=i;
这是一个错误!
问题:
为什么可以通过一个数组来访问并修改元素值而不可以通过指针来修改呢?
有一个疑问:
好像C中没有数组这个概念,它本来就是指针!
比如通过数组来访问元素时其实它还是通过指针来访问的是不是这样的?
问题1: *(ptr+1)=Y后ptr并没有变化,这和int i=10; int y=i+1;后i的值仍为1是一个道理.
问题2: 这和数组/指针没有关系.char heart[]="i love you"; heart指向的是栈内数据,所以heart[1]=x成立.如有char* p=heart; *p=x;也成立. char *word="frame"; word 指向的是一个常量字符串,既然是常量,当然不能改,所以*word=x;是错的,而word[1]=x;也是错的.
问题2: 这和数组/指针没有关系.char heart[]="i love you"; heart指向的是栈内数据,所以heart[1]=x成立.如有char* p=heart; *p=x;也成立. char *word="frame"; word 指向的是一个常量字符串,既然是常量,当然不能改,所以*word=x;是错的,而word[1]=x;也是错的.
我完全赞同zark的第二个观点。
第一个我用vc6.0运行的结果却是如下:
#include <iostream>
using namespace std;
void main()
{
char str[]="xyz";
char *ptr=str;
*(ptr+1)=Y;
cout<<str<<endl;
}
xYz
Press any key to continue
你用a【3】访问数组的第四个元素后,别把a【0】错误的当成a【3】的地址。呵呵
1。ptr代表分配的首地址,你修改的只是“*(ptr+1)=Y;”即ptr[1],而不是整个的
2。不知道