有点复杂,但程序很简单的,谢谢了
一、关于函数调用
有以下程序
# include <stdio.h>
void exch( int t )
{ t[0] = t[5]; }
main( )
{ int x[10] = {1,2,3,4,6,7,8,9,10},i=0;
while ( i<=4 ) { exch( &x[i]); i++; }
for (i=0; i<5; i++) printf("%d ",x[i]);
printf( "\n" ); }
程序运行后的输出结果是 A)2 4 6 8 10 B)1 3 5 7 9 C)1 2 3 4 5 D)6 7 8 9 10
答案选D 可是我不明白,这里没有返回值,形参值又不能传递给实参,那为什么结果会改变?
下面这道却对输出值没影响
void fun(int *a,int *b)
{
int *c;
c=a;a=b;b=c;
}
main()
{
int x=3,y=5,*p=&x,*q=&y;
fun(p,q); printf("%d,%d,",*p,*q);
fun(&x,&y); prin"%d,%d\n",*p,*q);
}
二、关于栈
设栈的存储空间为S(1 : 40),初始状态为bottom=0,top=0。现经过一系列入栈与出栈运算后,top=20,则当前栈中有多少个元素?
答案是20个,我不明白为啥不是21?40-20+1=21,不是吗
就像下面这道题:假设一个长度为50的数组(数组元素的下标从0到49)作为栈的存储空间,栈底指针bottom指向栈底元素,栈顶指针top指向栈顶元素,如果bottom=49,top=30(数组下标),则栈中具有多少个元素。
答案是:49-30+1=20
谢谢你,栈的问题我明白了,只是第一题我还是不太懂,还请您再给我讲讲好吗
void fun(int *a,int *b)
{
int *c;
c=a;a=b;b=c;
}
main()
{
int x=3,y=5,*p=&x,*q=&y;
fun(p,q); printf("%d,%d,",*p,*q);
fun(&x,&y); prin"%d,%d\n",*p,*q);
}
这个程序调用的p,q,&x,&y,不都代表了地址吗,为什么还是对输出没影响?
上面那个exch的程序之所以有效,不就是因为调用的是地址吗