| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3153 人关注过本帖, 1 人收藏
标题:几个问题,大家解解看
只看楼主 加入收藏
Devil_W
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:9
帖 子:1160
专家分:1797
注 册:2009-9-14
收藏
得分:0 
以下是引用zisefengye在2010-7-31 22:48:13的发言:

其实这个问题是这样的。sizeof(int*)是4,sizeof(char*)也是4。因为传递一个数组参数,接受参数的函数,会把传过来的参数当指针处理。


你终于明白了。
哥说了半天,你才明白,传进来的是指针。
2010-07-31 22:50
zisefengye
Rank: 5Rank: 5
等 级:职业侠客
帖 子:167
专家分:386
注 册:2010-6-27
收藏
得分:0 
以下是引用Devil_W在2010-7-31 22:47:08的发言:

sizeof的返回类型是 size_t , size_t的宏定义是unsigned int
 
因此 d=-1先cast成unsigned 在跟COUNTS比较。
 
也许这个才是这个问题的解。
应该是这个问题。我把代码改了一下:
int count  = COUNTS - 2;
 for(d = -1;d <= count;d++)
    printf("%d\n",array[d+1]);
就能够把所有元素输出了。
2010-07-31 22:56
Knocker
Rank: 8Rank: 8
等 级:贵宾
威 望:47
帖 子:10454
专家分:603
注 册:2004-6-1
收藏
得分:0 
以下是引用Devil_W在2010-7-31 22:50:39的发言:

 
 
你终于明白了。
哥说了半天,你才明白,传进来的是指针。
sizeof(arr[SIZE])是多少?为什么?

九洲方除百尺冰,映秀又遭蛮牛耕。汽笛嘶鸣国旗半,哀伤尽处是重生。     -老K
治国就是治吏。礼义廉耻,国之四维。四维不张,国之不国。   -毛泽东
2010-07-31 22:56
zisefengye
Rank: 5Rank: 5
等 级:职业侠客
帖 子:167
专家分:386
注 册:2010-6-27
收藏
得分:0 
以下是引用Devil_W在2010-7-31 22:50:39的发言:

 
 
你终于明白了。
哥说了半天,你才明白,传进来的是指针。
没等你说,我就明白了。你认为我是个不思学习的人么?楼主提出这个问题的时候,我就翻阅很多资料了。学习的积极性我还是有的
2010-07-31 22:58
zisefengye
Rank: 5Rank: 5
等 级:职业侠客
帖 子:167
专家分:386
注 册:2010-6-27
收藏
得分:0 
以下是引用Knocker在2010-7-31 22:56:48的发言:

sizeof(arr)是多少?为什么?
假如不是这样那么是40,可是经过函数传递,就完全不同了
#define SIZE 10
void test(int arr[])
{
    printf("%d", sizeof(arr));//这个时候就是指针,相当与sizeof(int*),就等于4;
}
int main()
{
    int arr[SIZE];
    printf("%d", sizeof(arr));//相当与sizeof(int)*SIZE,就等于40
    test(arr);
}

2010-07-31 23:03
Devil_W
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:9
帖 子:1160
专家分:1797
注 册:2009-9-14
收藏
得分:0 
这样看来,所有的问题都有解了。

唯一的还有疑问的是

float a=12.5;
printf("%d\n",a);


结果为什么是0
http://
2010-07-31 23:04
Knocker
Rank: 8Rank: 8
等 级:贵宾
威 望:47
帖 子:10454
专家分:603
注 册:2004-6-1
收藏
得分:0 
以下是引用zisefengye在2010-7-31 23:03:28的发言:

假如不是这样那么是40,可是经过函数传递,就完全不同了
#define SIZE 10
void test(int arr[])
{
    printf("%d", sizeof(arr));//这个时候就是指针,相当与sizeof(int*),就等于4;
}
int main()
{
    int arr;
    printf("%d", sizeof(arr));//相当与sizeof(int)*SIZE,就等于40
    test(arr);
}
sizeof还远远未掌握,还得努力,大一吧?

九洲方除百尺冰,映秀又遭蛮牛耕。汽笛嘶鸣国旗半,哀伤尽处是重生。     -老K
治国就是治吏。礼义廉耻,国之四维。四维不张,国之不国。   -毛泽东
2010-07-31 23:06
Devil_W
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:9
帖 子:1160
专家分:1797
注 册:2009-9-14
收藏
得分:0 
以下是引用Knocker在2010-7-31 23:06:48的发言:

 sizeof还远远未掌握,还得努力,大一吧?


某人总是以最差的眼光去看别人,其实你自己才是最差的。
2010-07-31 23:11
Devil_W
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:9
帖 子:1160
专家分:1797
注 册:2009-9-14
收藏
得分:0 
程序代码:
#include <stdarg.h>
#include <stdio.h>

// printf's action is like this
void test(char *fmt, ...)
{
    int i;
    float j;

    va_list ap, app;

    va_start(ap, fmt);
    app = ap;

    i = va_arg(ap, int); // when you call like printf("%d\n", i);this line while be called

    j = va_arg(app, double); // when you call like printf("%f\n", i);
    // this line while be called
    // and you can't call it like j = va_arg(app,float), because gcc compiler will complain
    
    va_end(ap);
    
    printf("if the args interpret as int, you get %d\n", i);
    printf("it should interpret as double, the right answer is %f\n",j);
}

int main(void)
{
    float a = 12.5;
    
    test("%d", a);
    
    return 0;
}


似乎这里能解释为什么结果是0了。
2010-07-31 23:12
Knocker
Rank: 8Rank: 8
等 级:贵宾
威 望:47
帖 子:10454
专家分:603
注 册:2004-6-1
收藏
得分:0 
以下是引用Devil_W在2010-7-31 23:11:13的发言:

 
 
某人总是以最差的眼光去看别人,其实你自己才是最差的。
我是最差

九洲方除百尺冰,映秀又遭蛮牛耕。汽笛嘶鸣国旗半,哀伤尽处是重生。     -老K
治国就是治吏。礼义廉耻,国之四维。四维不张,国之不国。   -毛泽东
2010-07-31 23:13
快速回复:几个问题,大家解解看
数据加载中...
 
   



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

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