| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 943 人关注过本帖
标题:swap1(a,a-1); 帮忙
只看楼主 加入收藏
encounter
Rank: 5Rank: 5
来 自:扬州
等 级:职业侠客
威 望:2
帖 子:150
专家分:359
注 册:2010-7-24
结帖率:100%
收藏
已结贴  问题点数:5 回复次数:10 
swap1(a,a-1); 帮忙
void swap1(int  c0[],int  c1[])

{  int  t;

   t=c0[0];

   c0[0]=c1[0];

   c1[0]=t;

}

void swap2(int  *c0,int  *c1)

{  int t;

  t=*c0;

  *c0=*c1;

  *c1=t;

}

void main()

{ int  a[2]={3,5}, b[2]={3,5};

 swap1(a,a-1);  swap2(&b[0],&b[1]);

 printf(“%d  %d  %d  %d \n”,a[0],a[1],b[0],b[1]);

}

以上程序运行结果是()

A.5 5 3 3    B.5 3 3 5

C.3 5 3 5    D.5 3 5 3
 swap1(a,a-1);  
怎么理解

搜索更多相关主题的帖子: void 
2010-07-28 11:33
BJ_BOY
Rank: 4
等 级:业余侠客
威 望:1
帖 子:77
专家分:225
注 册:2010-2-4
收藏
得分:1 
对swap1(a,a-1);的理解如下:

a中存放的是地址,sizeof(a)是该地址“绑定”的单元的字节数。
a - 1中的这个"1",实际上是相对于a中的地址向前移动了sizeof(a)这么多个字节。

另:如果在实际编程中,使用swap1(a,a-1)是非常不建议的!也仅能做一个题目来考考学生!


2010-07-28 11:46
lampeter123
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:54
帖 子:2508
专家分:6424
注 册:2009-1-30
收藏
得分:1 
出题的人蛋痛得利害

你的优秀和我的人生无关!!!!
    
    我要过的,是属于我自己的生活~~~
2010-07-28 11:50
encounter
Rank: 5Rank: 5
来 自:扬州
等 级:职业侠客
威 望:2
帖 子:150
专家分:359
注 册:2010-7-24
收藏
得分:0 
回复 2楼 BJ_BOY
能告诉我这题怎么做吗

swap1(a,a-1);  

ping   nbtstat   netstat   tracert    nat   at    ftp   telnet..................
2010-07-28 11:56
BJ_BOY
Rank: 4
等 级:业余侠客
威 望:1
帖 子:77
专家分:225
注 册:2010-2-4
收藏
得分:0 
正确的答案应该是:不确定!可惜,出题人没给出这一答案。为了说明这一问题,我把程序改了改,让楼主能看得更清楚一些(在Dev C++中调试运行)。

#include <stdio.h>
#include <stdlib.h>
void swap1(int c0[], int c1[])
{  
    int  t;
    printf("c0[0]=%d c1[0] = %d\n", c0[0], c1[0]);

    t=c0[0];
    c0[0]=c1[0];
    c1[0]=t;
   
    printf("c0[0]=%d c1[0] = %d\n", c0[0], c1[0]);

}

void swap2(int  *c0,int  *c1)
{  
    int t;
    t=*c0;
    *c0=*c1;
    *c1=t;
}

int main()
{
    int  a[2]={3,5}, b[2]={3,5};

    //读者可以打印出a、a-1、a-2、a-3的值观察一下并画出内存示意图后进行分析!
    //不难知道,地址为a-1、a-2、a-3的单元中的值是无法知道是多少的!!

    printf("a=%x, a-2=%x, &a[0]=%x, &a[1]=%x\n", a, a-2, &a[0], &a[1]);

    //你能知道*(a-1),*(a-2),*(a-3)中的结果吗??是的,是不确定的!
    //既然你不有确定,那你能确定swap(a, a-1)后的结果吗???
    printf("*a=%d, *(a-1)=%d, *(a-2)=%d, *(a-3)=%d\n", *a, *(a-1), *(a-2), *(a-3));

    swap1(a, a-1);
    swap2(&b[0],&b[1]);
    printf("%d  %d  %d  %d \n",a[0],a[1],b[0],b[1]);

    swap1(a, a-2);
    printf("%d  %d  %d  %d \n",a[0],a[1],b[0],b[1]);
   
    swap1(a, a-2);
    printf("%d  %d  %d  %d \n",a[0],a[1],b[0],b[1]);

    swap1(a, a-3);   //在我的这次执行中,*(a-3)中的值,等于16!!!
    printf("%d  %d  %d  %d \n",a[0],a[1],b[0],b[1]);


    system("PAUSE");
    return 0;
}
运行结果如下(当然,在你机器上运行结果可能与这不一样哟):
a=22ff70, a-2=22ff68, &a[0]=22ff70, &a[1]=22ff74
*a=3, *(a-1)=5, *(a-2)=3, *(a-3)=16
c0[0]=3 c1[0] = 5
c0[0]=5 c1[0] = 3
5  5  3  3
c0[0]=5 c1[0] = 3
c0[0]=3 c1[0] = 5
3  5  5  3
c0[0]=3 c1[0] = 5
c0[0]=5 c1[0] = 3
5  5  3  3
c0[0]=5 c1[0] = 16
c0[0]=16 c1[0] = 5
16  5  3  3
请按任意键继续. . .

2010-07-28 12:37
encounter
Rank: 5Rank: 5
来 自:扬州
等 级:职业侠客
威 望:2
帖 子:150
专家分:359
注 册:2010-7-24
收藏
得分:0 
谢谢谢谢

我也上机玩了会
真有种打人的冲动
关起门乱棍打死


其实呢我还有一点小小的问题
a[],b[]
应该是不相干的呀,然而实验证明他们之间有点暧昧
郁闷中........

ping   nbtstat   netstat   tracert    nat   at    ftp   telnet..................
2010-07-28 15:19
zhjr5201314
Rank: 4
等 级:业余侠客
帖 子:63
专家分:238
注 册:2009-9-10
收藏
得分:1 
A答案,数据存储的问题!
2010-07-28 15:42
encounter
Rank: 5Rank: 5
来 自:扬州
等 级:职业侠客
威 望:2
帖 子:150
专家分:359
注 册:2010-7-24
收藏
得分:0 
5楼和7楼PK下


ping   nbtstat   netstat   tracert    nat   at    ftp   telnet..................
2010-07-28 16:05
BJ_BOY
Rank: 4
等 级:业余侠客
威 望:1
帖 子:77
专家分:225
注 册:2010-2-4
收藏
得分:0 
哪里有什么相关哟:)如果说相干的话,就是因为他们里面的元素是一样的:)呵呵。
2010-07-28 16:10
BJ_BOY
Rank: 4
等 级:业余侠客
威 望:1
帖 子:77
专家分:225
注 册:2010-2-4
收藏
得分:0 
再有可能相干的地方:
a数组的内存和b数组的内存是相接的!这样会产生一些你所谓的“暧昧”的效果。

2010-07-28 16:11
快速回复:swap1(a,a-1); 帮忙
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.044428 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved