2 yunsiyun yunsiyun 于 2016.03.12 14:21 提问

一段C语言程序的输出结果 不太理解 求大侠们解释一下 谢谢谢谢

int main(void){
int n;
char y[10]="ntse"
char *x=y;
n=strlen(x);
*x=x[n];
x=++;
printf("x=%s\n",x);
printf("y=%s\n",y);
return 0;
}

结果为
x=tse
y=

不太能理解为什么y为空?
y被修改了吗?

5个回答

lx624909677
lx624909677   Ds   Rxr 2016.03.12 14:24

字符串赋值不能直接等于,直接等于是地址指向一个常量字符串地址,而本身并没有数据

qq_25093755
qq_25093755   2016.03.12 14:30

C语言的指针内存地址,y本身是没有数据的

ISEUWEI
ISEUWEI   2016.03.12 15:00

字符串以\0表示结束,指针指向第一个字符,指针赋值只是把第一个字符的地址给另一个指针,输出时遇到\0结束,本题x=x[n],第一个字符被末尾的结束符填上,指针后移一位,从第二个字符开始输出,这样说理解?

u010298834
u010298834   2016.03.12 15:02

我尝试给你分析一下:
1:第7行是错的,我暂且认为你应该是写成x++;或x=x+1;
2:首先我们分析可知n = 4,而现在x指针指向y数组的头部,即指向y[0];
3:那么x[n]我们知道字符串数组以'\0'做结尾标记,故x[n] = '\0'; 所以*x =‘\0’;即y[0] = '\0';
4: 此时x++后,x指向y[1]的地址,故输出x的值为:tse;
5:那么y数组在内存中的内容为“\0tse”;所以输出y则肯定为空!!!

ISEUWEI
ISEUWEI   2016.03.12 15:02

x从第二位输出,y仍从第一位输出,但被\0填上了

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!