爱问知识人 爱问教育 医院库

急 谁可以告诉我这题的结果

首页

急 谁可以告诉我这题的结果

main()
{
 char a;
 char *p=&a;

 *p++='a';
 *p++='b';
 *p++='c';
 *p++='d';
 *p++='\0';

 printf("%s",&a);
 getch();
 exit();
}
告诉我结果是a 还是abcd 或者是别的
并且解释一下好吗

提交回答
好评回答
  • 2019-04-25 20:21:55
    结果是 "abcd". 但是这样写代码是标准的错误范例。
    因为char a, 只有一个 char的空间。要放下"abcd"需要5个char的空间。
    如果这样写,'bcd\0'四个字符会战用其他的堆栈位置,如果这些位置在堆栈中是被其他变量用到的话就有可能会使程序产生不可预期的结果。

    H***

    2019-04-25 20:21:55

其他答案

    2019-04-25 20:16:02
  • 第一个char *p = &a; 和这句话意思等同:char p[?]; 且p[0] = a;
    第二个*p++='a'; 等同于int i=0; p[i] = 'a'; i++; 操作结束之后i=1;
    随后*p++ = 'b'; 等同于(此时i=1); p[i] = 'b'; i++; (使得i=2)
    随后*p++ = 'c'; 等同于(此时i=2); p[i] = 'c'; i++; (使得i=3)
    随后*p++ = 'd'; 等同于(此时i=3); p[i] = 'd'; i++; (使得i=4)
    最后*p++ = '\0'; 等同于(此时i=4); p[i] = 0; i++; (使得i=5)
    最后的打印:因为a的地址就是p指针首次赋值地址,所以产生的是字符串。

    刘***

    2019-04-25 20:16:02

  • 2019-04-25 20:11:56
  • 很明显是abcd,首地址是字符a的地址,指针p指向a,将a的内容填为 'a',然后指针加1(指向相邻的下一个地址),然后将下一个地址内容填为'b'......将最后一个地址内容填为'\0'。最后打出的字符串就是"abcd"。

    w***

    2019-04-25 20:11:56

类似问题

换一换

相关推荐

正在加载...
最新问答 推荐信息 热门专题 热点推荐
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200

热点检索

  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 175-194
返回
顶部
帮助 意见
反馈

确定举报此问题

举报原因(必选):