问几个在2级C复习过程中遇到的问题。。
问题1:
#define Power2(x) x*x
main()
{int i=6,j=8;printf("%d",Power2(i+j));}
答案说是这样算的,6+8*6+8等于62
为什么不是,先加起来,14*14=196?
问题2:
调用函数时什么时候是值传递,什么时候是地址传递?
原来以为一般的数是值传递,数组是地址传递。今天看到一个题目
void swap(int *a,int *b)
{int *t;t=a;a=b;b=t;}
为什么是值传递呢?
问题3:有一段程序:
{while(c!=',')
{c=getchar();putchar(c);}}
这段程序为什么是从第一个逗号处截断而不是忽略输入字符串中的逗号?
是先执行while后读入数据的吗?
问题4:看到这么一个写法:
printf("%s",&x[i][i]);
其中x是一个二维字符数组,但是为什么printf()函数会用取地址符?是个什么意思?
问题比较多。。
希望有前辈指教。。
[解决办法]
1.x用i+j替换
所以 x*x = i+j*i+j
如果要得到(i+j)*(i+j)
那么#define Power2(x) x*x
应改为 #define Power2(x) (x)*(x)
2.交换指针的值,如果传入的是指针,那么就是值传递了
比如 int *aa=5,*bb=10;
swap(aa,bb);
就是按值传递。
3.循环条件就是输入‘,’时,终止循环。
当你输入逗号时,输出逗号,然后while()里面判断是逗号,循环终止。于是就截断了。
4。printf函数输出字符串的用法。详细百度查阅一下printf函数
[解决办法]
1
#define Power2(x) (x)*(x)
2
void swap(int *a,int *b)
{int t;t=*a;*a=*b;*b=t;}
3
遇到逗号就退出循环了。
4
字符串是字符的地址。
[解决办法]
唉,这个lz啊,有的学了呀……
1.什么叫宏,宏做的就只是是简单的替换,它不会“聪明”到给你加一个括号
2.c语言中,只有按值传递的概念,传地址也是按值传的,在函数中对形参值的修改,是没有办法传递会实参的,但是通过传递指针,在函数中修改指针所指的变量值,也就是地址中存储的值,是可以被保存下来的
3.while(表达式),括号中的表达式的值,为1,就执行while内程序段;为0,就退出循环
4.c语言中,数组是按行序为主序(比如说a[2][2],他的存储为a[0][0],a[0][1],a[1][0],a[2][0])存储的,&取到a[i][i]地址,意思是从(*(a+i)+i)开始按照%s的格式输出,直到遇到'\0'结束!
&a[i][i]就是(*(a+i)+i