啊哈磊_编程从这里起步

标题: define问题 [打印本页]

作者: 纨绔☆子弟    时间: 2013-8-22 21:29
标题: define问题

#include <stdio.h>
#include <stdlib.h>
#define AS a
int main()
{
        int a=AS;
    printf("%d",a);
        system("pause");
        return 0;
}




为何每次运行结果都是2?求详解

作者: rosynirvana    时间: 2013-8-22 21:29
纨绔☆子弟 发表于 2013-8-23 11:31
编译了5次,还是22

用在线编译器
或者重启计算机
作者: rosynirvana    时间: 2013-8-22 21:41
宏只做简单的文本替换
#define AS a
int a =AS;

预处理之后就是
int a = a;

这句会被处理成
int a;
a = a;

也就是
int a;

未赋值的局部变量的值是未指明的,可能是内存残留的任何值,在你实验的时候碰巧是2
作者: 超神级    时间: 2013-8-22 22:00
这是一道大坑题目
作者: 纨绔☆子弟    时间: 2013-8-23 09:27
本帖最后由 纨绔☆子弟 于 2013-8-23 09:29 编辑
rosynirvana 发表于 2013-8-22 21:41
宏只做简单的文本替换
#define AS a
int a =AS;

不好意思,本来分你可以拿走的,但我一运行又有了问题。。。。
@rosynirvana
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #define AS a
  4. int main()
  5. {                int b;
  6.                 b=20;
  7.         int a=AS;
  8.     printf("%d",a);
  9.         system("pause");
  10.         return 0;
  11. }
复制代码
当定义一个无值的b时,输出2
赋值后输出又是40;
不会出现别的情况
难道内存只有2与40么?
求解
答出了给分啊~~~
O(∩_∩)O~
作者: rosynirvana    时间: 2013-8-23 11:00
纨绔☆子弟 发表于 2013-8-23 09:27
不好意思,本来分你可以拿走的,但我一运行又有了问题。。。。
@rosynirvana当定义一个无值 ...

多重新编译几次,一般就能看到不同的值了
如果你不重新编译,变量指向的还是同一个地址,这个地址残留的值有可能还没变

或者用网上的编译器编译,例如codepad.org
作者: 纨绔☆子弟    时间: 2013-8-23 11:31
rosynirvana 发表于 2013-8-23 11:00
多重新编译几次,一般就能看到不同的值了
如果你不重新编译,变量指向的还是同一个地址,这个地址残留的 ...

编译了5次,还是22
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #define AS a
  4. int main()
  5. {                int b;
  6.                 b=20;
  7.         int a=AS;
  8.     printf("%d",a);
  9.         system("pause");
  10.         return 0;
  11. }
复制代码

作者: 纨绔☆子弟    时间: 2013-8-23 12:46
rosynirvana 发表于 2013-8-23 11:53
用在线编译器
或者重启计算机

算了,给你分吧
作者: 纨绔☆子弟    时间: 2013-8-23 12:46
rosynirvana 发表于 2013-8-23 11:53
用在线编译器
或者重启计算机

算了,给你分吧
作者: 超神级    时间: 2013-8-23 16:57
本帖最后由 超神级 于 2013-8-23 17:01 编辑

                                                
作者: 4399APPLE    时间: 2013-11-22 10:02
超神级 发表于 2013-8-23 16:57

空帖子。。。         




欢迎光临 啊哈磊_编程从这里起步 (https://bbs.codeaha.com/) Powered by Discuz! X3.2