请教三个C语言问题

来源:百度知道 编辑:UC知道 时间:2024/05/03 08:57:29
一、
void swap1(int c[])
{ int t;
t=c[0];c[0]=c[1];c[1]=t;
}
void swap2(intco,intc1)
{ int t;
t=c0;c0=c1;c1=t;
}
main()
{int a[2]={3,5},b[2]={3,5};
swap1(a);swap2(b[0],b[1]);
prontf("%d %d %d %d\n",a[0],a[1],b[0],b[1]);
}
答案是5 3 3 5为什么第一个能交换第二个不能呢?另外那个void我知道好象是无返回值的意思吧?可是到底在什么时候用呢?
二、
二维数组第一维的大小该怎么确定呢?举个例子 int c[][3]={1,2,3,4,5}该怎么知道第一维的大小呢?
三、
main()
{ char str[]="xyz".*ps=str;
while(*ps) ps++;
for(ps--;ps-str>=0;ps--)puts(ps);
}
执行后输出结果是什么,请给详细点的步骤

1:函数都是以单向值传递的,也就是说由实参传向形参,第二个只所以没有交换值是因为这个函数的参数是局部变量,只在本函数内起作用,和实参的变量没有关系.至于void的意思是无返回值,不需要返回值的函数,便可在其前加上void.
2:二维数组的排列顺序c[0][0]c[0][1]c[0][2]……以你的列子来说int c[][3]={1,2,3,4,5}因为第二个数为3所以c[][0],c[][1],c[][2]三个数,大括号里有5个数,显然第一个数为2.
3:楼上的讲得太清楚了,
main()
{ char str[]="xyz".*ps=str; //ps 是一个指针,指向str的首地址
while(*ps) ps++; //当*ps的内容不为空时,PS++ 这个时候ps已经指向Z的后一个单元了
for(ps--;ps-str>=0;ps--)//先ps--让它指向字母Z,直到ps-str<0;
puts(ps); //这是一个输出字符串的函数。第一次输出z
第二次输出yz 第三次输出xyz
楼主需打好基础,仔细看几遍书,问题即可解决。

一,swap1方法改变了数组A的顺序,也就是把A的数据的内存地址改变了.而swap2方法只是按值传递改变了C0和C1的值,不会改变数组中数据的地址,VOID是没返回值的,但只能是按值传递的时候才需要,换成按地址传递,他就没作用了
二,二维数组就像一个表,有行有列,C[2][3]表示是2行3列的数组,如果你定不下来到底要建多少行,列,可以直接用C[][],用的时候也是C[0][1],C[0][2],C[1][0],C[2][0]...
三,char str[]="xyz".//数组STR[]
*ps=str; //指向STR[]的指针PS
while(*ps) ps++; //???CHAR类型++得什么
for(ps--;ps-str>=0;ps--)puts(ps);//???还是这个问题
怀疑程序本身有问题...

三、
int main(int argc, char*