[问题] 副程式(阵列),整数阵列元素个数无法计算,字串可以

楼主: mickeyopq (一斤砒霜)   2014-12-22 23:17:18
:开发平台(Platform): (Ex: VC++, GCC, Linux, ...)
GCC,debian
额外使用到的函数库(Library Used): (Ex: OpenGL, ...)
问题(Question):
副程式(阵列),整数阵列元素个数无法计算,字串可以
喂入的资料(Input):
int a[]={4,5,6,7}
预期的正确结果(Expected Output):
int a[]=4,5,6,7,
错误结果(Wrong Output):
a[]=4,
程式码(Code):(请善用置底文网页, 记得排版)
1 #include <stdio.h>
2 void pntArr(int *a){
3 int len_a=sizeof(a)/sizeof(int),i;
4 printf("len....%d\n",len_a);
5 printf("a[]=");
6 for(i=0;i<len_a;i++){
7 printf("%d,",*(a+i));
8 }
9 }
10
11 int main(){
12 int a[]={4,5,6,7};
13 int len_a=sizeof(a)/sizeof(int);
14 pntArr(a);
15 }
补充说明(Supplement):
整数阵列call副程式,查google说是typeof不能计算动态阵列,
看其它类似的代码都是长度(元素数量)一起传过去,
我问题是在...我把int []改成char [],就能得到我预期的结果。
ex.. char a[]="abcd";
作者: PoorLoser (废文制造机)   2014-12-22 23:19:00
推, 值得深思的好问题
作者: joefaq (小瑜)   2014-12-23 00:09:00
sizeof(*a) 你只有取a[0]来算size
楼主: mickeyopq (一斤砒霜)   2014-12-23 02:27:00
抱歉,那个是再试的,我做修改了......
作者: narukaze (Pt)   2014-12-23 07:04:00
是不是因为传array到function, function不知物件个数然后sizeof(a)计算到pointer的大小又刚好你的物件个数是4个
作者: cjcat2266 (CJ Cat)   2014-12-23 07:35:00
楼上正解,一般作法是传入pointer和元素个数
作者: uranusjr (←這人是超級笨蛋)   2014-12-23 09:10:00
刚好你的 OS 的 pointer type 大小是 char 的四倍吧 XD
作者: s25g5d4 (function(){})()   2014-12-23 13:28:00
是说 char a[] = "abcd"; 应该是 5 个 byte 才对纯粹是他 OS 的 pointer 刚好占 4 个 byte 而已
作者: ahwater01 (臭酸咖)   2014-12-23 14:24:00
func里是pointer的Size, main里是int Array的Size
楼主: mickeyopq (一斤砒霜)   2014-12-23 14:52:00
谢谢,解了,因为我字串也刚好宣告4个所以看不出来。如果我宣告更多a[]="abcdefg",他还是只印4个。照上面这逻辑,用质数的长度比较能避免....
作者: Push5F (帐号已卖)   2014-12-25 02:17:00
必须传入阵列大小,而纯(strlen)以0为结束
作者: s25g5d4 (function(){})()   2014-12-26 03:02:00
无论如何都不想多传一个参数可以考虑把他包成 struct

Links booklink

Contact Us: admin [ a t ] ucptt.com