| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1007 人关注过本帖
标题:问个比较简单的问题,在兴趣的来看看~
只看楼主 加入收藏
chump345
Rank: 1
来 自:家里蹲大学
等 级:新手上路
帖 子:108
专家分:5
注 册:2007-11-24
结帖率:93.33%
收藏
 问题点数:0 回复次数:14 
问个比较简单的问题,在兴趣的来看看~
#include"stdio.h"
void main()
{int i,a[10];
for(i=0;i<10;)
   {
    a[i]=++i;
    printf("a[%d]%d\n",i,a[i]);
   }  
getch();}
这个代码的结果是从a[1]开始输出的,为什么不是从a[0]开始呢~
另外如果变成:
#include"stdio.h"
void main()
{int i,a[10];
 for(i=0;i<10;)
   {
   a[i]=i++;
   printf("a[%d]%d\n",i,a[i]);
}
getch();}
后面就输出的是很大的数字~不知道是为什么~应该是随机数字吧~
   这两个式子有什么差别,小弟比较笨,希望能详细的帮帮我~
搜索更多相关主题的帖子: 兴趣 
2007-11-25 17:09
天人和一
Rank: 1
等 级:新手上路
帖 子:137
专家分:0
注 册:2007-10-11
收藏
得分:0 
a[10]为:a[0], a[1], a[2], a[3], a[4], a[5],  a[6]...........a[9]

a[ i ]=++i:  i=i+1;  a[ i ] = i ;
a[ i ]=i++;  a[ i ] = i ;  i= i + 1 ;
2007-11-25 17:19
chump345
Rank: 1
来 自:家里蹲大学
等 级:新手上路
帖 子:108
专家分:5
注 册:2007-11-24
收藏
得分:0 
看不懂LS的哦~前面那个程序是因为程序是从右往左执行的么
后面的那个程序呢?为什么输出那一大串的数字~

凤凰涅磐,浴火重生!

2007-11-25 17:34
cosdos
Rank: 9Rank: 9Rank: 9
来 自:ShangHai
等 级:蜘蛛侠
威 望:6
帖 子:2109
专家分:1385
注 册:2007-6-19
收藏
得分:0 
// 两段代码都有问题

for(i=0;i<10;)
   {
   a[i]=i++;
   printf("a[%d]%d\n",i,a[i]);
}

ar[i] = i++;   //  ar[0] = 0;
print() 中 i = 1,  ar[1]

赋值后 i + 1,
所以打印的数据是未赋值的。

—>〉Sun〈<—
2007-11-25 17:45
cosdos
Rank: 9Rank: 9Rank: 9
来 自:ShangHai
等 级:蜘蛛侠
威 望:6
帖 子:2109
专家分:1385
注 册:2007-6-19
收藏
得分:0 
/* 应该这样写,如下 */
for(i = 0; i < 10; i++)
{
    a[i] = i;
    printf("a[%d] %d\n", i, a[i]);
}
收到的鲜花
  • chump3452007-11-25 18:03 送鲜花  2朵   附言:我很赞同

—>〉Sun〈<—
2007-11-25 17:46
chump345
Rank: 1
来 自:家里蹲大学
等 级:新手上路
帖 子:108
专家分:5
注 册:2007-11-24
收藏
得分:0 
哦~原来是这样~
     上面那个程序是因为程序是从左到右执行的,所以错了~
  下面的是因为输出中没有给a[i]赋值,所以输出的是随机值了~是么~

凤凰涅磐,浴火重生!

2007-11-25 17:55
cosdos
Rank: 9Rank: 9Rank: 9
来 自:ShangHai
等 级:蜘蛛侠
威 望:6
帖 子:2109
专家分:1385
注 册:2007-6-19
收藏
得分:0 
请看楼下的帖子。


2段代码都没有正确赋值,并且
2段代码都 访问了 ar[10]  /* 第11个元素 */  这种错误是绝对不允许的。
这就是指针所谓的危险,可以指向一些程序不该访问的内容。可能会造成程序错误。

[[italic] 本帖最后由 cosdos 于 2007-11-25 18:27 编辑 [/italic]]

—>〉Sun〈<—
2007-11-25 18:08
cosdos
Rank: 9Rank: 9Rank: 9
来 自:ShangHai
等 级:蜘蛛侠
威 望:6
帖 子:2109
专家分:1385
注 册:2007-6-19
收藏
得分:0 
对于 ar[i] = ++i; 或 ar[i] = i++;  
你出现的情况应该是:
ar[i] = ++i;   
先 i = i + 1
然后成了 ar[1] = 1;
printf("ar[%d] %d\n", 1, ar[1]);

ar[i] = i++;
先 ar[0] = 0;
然后 i = i + 1
printf("ar[%d] %d\n", 1, ar[1]);


>> 前缀和后缀的区别:
int n;
n = ++i;    是先 +1 再赋值给 n
n = i++;    是先赋值给 n 后再 +1

>> 一些关于数组的内容:
一般情况下都是从 ar[0]  数组的第一个元素开始赋值。
ar[9]  是数组的第10个元素。

ar[9]  == *(ar + 9);     /* 可以这样理解,在数组第一个元素的地址处移动9格,即第10格 */


-------------------------- cosdos ---------------------------

[[italic] 本帖最后由 cosdos 于 2007-11-25 20:28 编辑 [/italic]]

—>〉Sun〈<—
2007-11-25 18:20
now
Rank: 1
来 自:广州
等 级:新手上路
帖 子:544
专家分:0
注 册:2007-11-9
收藏
得分:0 
#include"stdio.h"
void main()
{int i,a[color=white][5[/color]];
for(i=0;i<5;)
   {
    a[i]=++i;
    printf("a[%d]%d\n",i,a[i]);
   }  
getch();}
这个代码的结果是从a[1]开始输出的,为什么不是从a[0]开始呢~////////////////////
我的看法;
a[i]=++i;此句中(++i)意为先对 i 自加后,再取 i 的值,然后再执行赋值(其中也包括了对数组下标 i 的赋值)。因此,第一次循环时,a[ 1 ]=1,并没有对a[ 0] 赋值;printf("a[%d]%d\n",i,a[i]); 到了此句,此时i ==1,输出a[i]则输出的是a[1]。

////////////////////////////////////////另外如果变成:
#include"stdio.h"
void main()
{int i,a[5];
for(i=0;i<5;)
   {
   a[i]=i++;
   printf("a[%d]%d\n",i,a[i]);
}
getch();}
后面就输出的是很大的数字~不知道是为什么~应该是随机数字吧~///////////////////////////

对此我的看法:
a[i]=i++; 此句中i++意为先取i 的值,并对a[ i]  赋值后,i  再自加。第一次循环,取i=0,a[i]为a[0]=0,然后i 自加,执行到下一句: printf("a[%d]%d\n",i,a[i]); 此时,i  值为1,故要输出a[i],则是要输出的是a[1]的值,而此时上一句仅对a[0] 赋了值,并没有对a[1]赋值。因此,输出的全部为地址。


还有在调试过程中,我发觉一个好奇怪的现象,就是a[5]的值随i 的改变而改变,并始终等于i 的值。严格来说,定义数组int a[5];应只有a[0],a[1],a[2],a[3],a[4].并不能取到a[5].故对此我也不明白。


[[italic] 本帖最后由 now 于 2007-11-25 20:39 编辑 [/italic]]
2007-11-25 20:22
cosdos
Rank: 9Rank: 9Rank: 9
来 自:ShangHai
等 级:蜘蛛侠
威 望:6
帖 子:2109
专家分:1385
注 册:2007-6-19
收藏
得分:0 
/* 大家可以看 8楼的分析 */


回楼上:

对于 ar[i] = ++i; 或 ar[i] = i++;  
你出现的情况应该是:
ar[i] = ++i;   
先 i = i + 1
然后成了 ar[1] = 1;
printf("ar[%d] %d\n", 1, ar[1]);

ar[i] = i++;
先 ar[0] = 0;
然后 i = i + 1
printf("ar[%d] %d\n", 1, ar[1]);

定义为 int ar[5];
但是程序访问到了 ar[5],并对 ar[5] 赋值了,也是循环中 i 的最后一次赋值。

//

[[italic] 本帖最后由 cosdos 于 2007-11-25 20:34 编辑 [/italic]]

—>〉Sun〈<—
2007-11-25 20:32
快速回复:问个比较简单的问题,在兴趣的来看看~
数据加载中...
 
   



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

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