| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3153 人关注过本帖, 1 人收藏
标题:几个问题,大家解解看
只看楼主 加入收藏
Devil_W
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:9
帖 子:1160
专家分:1797
注 册:2009-9-14
收藏
得分:0 
回复 楼主 BJ_BOY
程序代码:
 #include <stdio.h>
  #include <stdlib.h>
  #define SIZE 10
  void size(int arr[SIZE])
  {
       printf("size of array is:%d\n",sizeof(arr));
  }

  int main()
  {
       int arr[SIZE];
       size(arr);

       system("PAUSE");
       return 0;
  }


永远都是4,因为传进去的是一个int 指针,int指针的大小永远是4
2010-07-31 22:01
Knocker
Rank: 8Rank: 8
等 级:贵宾
威 望:47
帖 子:10454
专家分:603
注 册:2004-6-1
收藏
得分:0 
以下是引用zisefengye在2010-7-31 21:29:52的发言:

#define chDIMOF(Array) (sizeof(Array) / sizeof(Array[0]))window核心编程里就是这么写的。
其实现在stdlib.h中已经有_countof(_Array)
原形是:
/* _countof helper */
#if !defined(_countof)
#if !defined(__cplusplus)
#define _countof(_Array) (sizeof(_Array) / sizeof(_Array[0]))
#else
extern "C++"
{
template
char (*__countof_helper(UNALIGNED _CountofType (&_Array)[_SizeOfArray]))[_SizeOfArray];
#define _countof(_Array) sizeof(*__countof_helper(_Array))
}
#endif
#endif

sizeof()返回的类型是size_t,其实是unsigned int。我都测试过了把程序改成:
for(d=0;d <= (COUNTS-1);d++)
        printf("%d\n",array[d]);
就能够打印出所有元素。所以我认为是-1导致直接跳过循环。
基础不牢,代码写得少,
问题在这里
d <= (COUNTS-1);

九洲方除百尺冰,映秀又遭蛮牛耕。汽笛嘶鸣国旗半,哀伤尽处是重生。     -老K
治国就是治吏。礼义廉耻,国之四维。四维不张,国之不国。   -毛泽东
2010-07-31 22:05
Knocker
Rank: 8Rank: 8
等 级:贵宾
威 望:47
帖 子:10454
专家分:603
注 册:2004-6-1
收藏
得分:0 
以下是引用Devil_W在2010-7-31 22:01:40的发言:

 #include  
  #include  
  #define SIZE 10
  void size(int arr)
  {
       printf("size of array is:%d\n",sizeof(arr));
  }
 
  int main()
  {
       int arr;
       size(arr);
 
       system("PAUSE");
       return 0;
  }
 
永远都是4,因为传进去的是一个int 指针,int指针的大小永远是4
谁告诉你的????

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

基础不牢,代码写得少,
问题在这里
d <= (COUNTS-1);
那么我就无法明白,我把-1改成0就可以打印出所有元素。请解释一下。难道是我的IDE出妖蛾子了。
2010-07-31 22:10
Knocker
Rank: 8Rank: 8
等 级:贵宾
威 望:47
帖 子:10454
专家分:603
注 册:2004-6-1
收藏
得分:0 
int a=(d <= (COUNTS-1));告诉我a的值是多少

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

谁告诉你的????
估计是编译器告诉他的。因为我也做了测试,还测试了把char[]和long[],结果都是4,我也很惊讶。
2010-07-31 22:12
Devil_W
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:9
帖 子:1160
专家分:1797
注 册:2009-9-14
收藏
得分:0 
以下是引用Knocker在2010-7-31 22:06:49的发言:

谁告诉你的????


你这么问还觉得丢人。

你改动我引用的code干嘛
2010-07-31 22:15
zisefengye
Rank: 5Rank: 5
等 级:职业侠客
帖 子:167
专家分:386
注 册:2010-6-27
收藏
得分:0 
以下是引用Knocker在2010-7-31 22:12:39的发言:

int a=(d <= (COUNTS-1));告诉我a的值是多少
那要看d的值了,如果d<=COUNST - 1则是1,不过负数除外,假如是负数则是0


[ 本帖最后由 zisefengye 于 2010-7-31 22:28 编辑 ]
2010-07-31 22:15
Devil_W
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:9
帖 子:1160
专家分:1797
注 册:2009-9-14
收藏
得分:0 
以下是引用zisefengye在2010-7-31 22:12:50的发言:

估计是编译器告诉他的。因为我也做了测试,还测试了把char[]和long[],结果都是4,我也很惊讶。



傻不傻? long * 跟char * 的大小也都是4.
2010-07-31 22:17
zisefengye
Rank: 5Rank: 5
等 级:职业侠客
帖 子:167
专家分:386
注 册:2010-6-27
收藏
得分:0 
以下是引用Devil_W在2010-7-31 22:17:39的发言:

 
 
 
傻不傻? long * 跟char * 的大小也都是4.
看来你对我的回答也很震惊。我相信编译器告诉我的,假如某人对我说,傻不傻? long * 跟char * 的大小也都是4。你认为我会直接相信么。假如换个编译器是否还是这样的答案么。请不要武断的把你的观点直接告诉我。如果某人对你说,c#的性能高于c\c++,你相信么。如果你和他辩,你认为他会相信你么。
2010-07-31 22:22
快速回复:几个问题,大家解解看
数据加载中...
 
   



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

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