两道C语言试题,求讲解;谢谢
3.下列程序的输出结果是100。#defineT10#defineMD3*Tprintf(“%d”,30/MD);为什么等于100谢谢;10.下列程序的输出结果是1,3。...
3. 下列程序的输出结果是 100 。
#define T 10
#define MD 3*T
printf(“%d”,30/MD);
为什么等于100 谢谢;
10. 下列程序的输出结果是 1,3 。
#include <stdio.h>
void p(int *x,int y)
{ ++*x; y--; }
void main( )
{ int x=0,y=3;
p(&x,y);
printf(“%d,%d”x,y);
}
y为什么不受影响呢; 谢谢,说细点~~~
呵呵,谢谢楼下两位朋友;
y-- 换成++y 输出结果 同样是1,3 ; 问题不在这,类似这是什么作用域的问题? 怎么解释我给忘了,二年前学的,现在要应付一个考试;谁再给讲一下谢谢; 展开
#define T 10
#define MD 3*T
printf(“%d”,30/MD);
为什么等于100 谢谢;
10. 下列程序的输出结果是 1,3 。
#include <stdio.h>
void p(int *x,int y)
{ ++*x; y--; }
void main( )
{ int x=0,y=3;
p(&x,y);
printf(“%d,%d”x,y);
}
y为什么不受影响呢; 谢谢,说细点~~~
呵呵,谢谢楼下两位朋友;
y-- 换成++y 输出结果 同样是1,3 ; 问题不在这,类似这是什么作用域的问题? 怎么解释我给忘了,二年前学的,现在要应付一个考试;谁再给讲一下谢谢; 展开
8个回答
展开全部
3. 下列程序的输出结果是 100 。
#define T 10
#define MD 3*T
printf(“%d”,30/MD);
宏展开后是:
printf(“%d”,30/MD);
=> printf("%d",30/3*T);
=>=> printf("%d",30/3*10);
=>30/3 = 10; 10 * 10 = 100
10. 下列程序的输出结果是 1,3 。
#include <stdio.h>
void p(int *x,int y)
{ ++*x; y--; }
void main( )
{ int x=0,y=3;
p(&x,y);
printf(“%d,%d”x,y);
}
形参传入时,只传了副本,并不会对入参y进行修改
改成 int *y就会修改
#define T 10
#define MD 3*T
printf(“%d”,30/MD);
宏展开后是:
printf(“%d”,30/MD);
=> printf("%d",30/3*T);
=>=> printf("%d",30/3*10);
=>30/3 = 10; 10 * 10 = 100
10. 下列程序的输出结果是 1,3 。
#include <stdio.h>
void p(int *x,int y)
{ ++*x; y--; }
void main( )
{ int x=0,y=3;
p(&x,y);
printf(“%d,%d”x,y);
}
形参传入时,只传了副本,并不会对入参y进行修改
改成 int *y就会修改
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#define T 10
#define MD 3*T
printf("%d",30/MD);
编译之前进行预处理之后的代码是:
printf("%d",30/3*10);
结果当然是100,30/3等于10,10*10等于100,乘除运算依次进行。
看调用:
p(&x,y);
y在函数p里面被修改了,但是这个修改是函数的临时空间,不会被修改的。
其实函数参数里面的东西都不会被修改,包括前面一个参数&x(表示变量x的地址),函数里面是通过这个地址对x变量的内容进行了修改,如果函数里面对地址进行修改,返回后也是没有影响的。
#define MD 3*T
printf("%d",30/MD);
编译之前进行预处理之后的代码是:
printf("%d",30/3*10);
结果当然是100,30/3等于10,10*10等于100,乘除运算依次进行。
看调用:
p(&x,y);
y在函数p里面被修改了,但是这个修改是函数的临时空间,不会被修改的。
其实函数参数里面的东西都不会被修改,包括前面一个参数&x(表示变量x的地址),函数里面是通过这个地址对x变量的内容进行了修改,如果函数里面对地址进行修改,返回后也是没有影响的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#define MD (3*T)就对了,#define 定义后面只能直接赋值一个常量,数字必须是一个具体的数,而不是运算式。
因为y只传了一个引用过去,子函数中的改变是没有作用的。而x你传了地址,这样就会改变。学过java就知道了。
因为y只传了一个引用过去,子函数中的改变是没有作用的。而x你传了地址,这样就会改变。学过java就知道了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
1.#define 的作用是原封不动的代入,所以30/MD就相当于30/3*10,乘除法是同级运算,从左向右算,所以结果是100。
2.p函数中x传递的是指针,指向的就是x这个变量所存在的地址,所以对指针的操作就会影响原有的x。而y的传递的是y的一个拷贝,变化的只是y的一个副本,所以原有的y没有变化。
2.p函数中x传递的是指针,指向的就是x这个变量所存在的地址,所以对指针的操作就会影响原有的x。而y的传递的是y的一个拷贝,变化的只是y的一个副本,所以原有的y没有变化。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#define 定义的两个常量啊!
30/MD=30/3*10=100
30/MD=30/3*10=100
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询