a[9]与9[a]的确是相同的,以及函数内部如何得到传入数组参数的大小
记得以前就曾为a[9],9[a]问题感到莫名其妙过,今天终于找到标准答案啦,呵呵:
//
<<C专家编程>>第9.2.1节中有一段说:“你中只要记住:在表达式中,指针和数组是可以互换的,因为它们在编译器里的最终形式都是指针,并且都可以进行取下标操作。就像加法一样,取下标操作符的操作数也是可以交换的(它并不在在意操作数的先后顺序,就像在加法中3+5和5+3没有什么不一样)。这就是为什么在一个a[10]的声明中下面两种形式都是正确的:
a[6]=...;
6[a]=...;
在实际的产品代码中,上面第二种形式从来不曾使用。确实,它除了可以把新手搞晕以外,实在没有什么 实际意义。
//
原来是这么一回事!
如何在函数调用内部得到传入数组参数的大小?
如题所示:比如有一函数原型为:
void test_fun(char ca_test[]);
我可以如下调用它:
char ca_test[10]={0};
test_fun(ca_test);
现在在test_fun()内部,我如何能得到传入数组参数的维数大小呢?sizeof(ca_test)/sizeof(char)显然不成功!请教各位啦,谢谢!
tailzhou(尾巴) ( ) 信誉:100 Blog 2006-8-25 16:43:34 得分: 0
好象没什么办法的。
triace_zhang(『雪梨码头』做个编译器好难) ( ) 信誉:100 Blog 2006-8-25 16:45:11 得分: 2
void test_fun(char ca_test[]);//改为void test_fun(char ca_test[], int size);
加一个参数,调用时:
test_fun(ca_test,10); //把长度传进去.
Top
command_zhang(Session) ( ) 信誉:100 Blog 2006-8-25 16:45:31 得分: 2
while ca_test[i]<>"/0"
{
i++;
}
Top
UPCC(杂食动物) ( ) 信誉:118 Blog 2006-8-25 16:45:50 得分: 0
sizeof(ca_test)/sizeof(char)!!这个应该可以啊
Top
blue_zyb() ( ) 信誉:100 Blog 2006-8-25 16:46:24 得分: 2
除非你愿意修改原型。。。
Top
blue_zyb() ( ) 信誉:100 Blog 2006-8-25 16:51:02 得分: 5
用模板实现形式上的一个参数:
template <int N>
void test(char (&a)[N])
{
cout << sizeof(a) << endl;
}
void main()
{
char a[102];
test(a);
}
Top
fytzzh(我爱summer) ( ) 信誉:100 Blog 2006-8-25 16:53:50 得分: 2
一般设计函数的时候都要加个参数来说明树组的大小。
sizeof(ca_test)=4 指针的大小。
如果不修改原形的话。你在初始话的时候不要初始成'/0',可以使用strlen计算了。
Top
anyue417(振浩) ( ) 信誉:100 Blog 2006-8-25 16:54:09 得分: 0
1:based C;
2: 不修改原型
看来真是没办法啊,大家再帮忙想想哈,谢谢
Top
anyue417(振浩) ( ) 信誉:100 Blog 2006-8-25 16:54:52 得分: 0
“如果不修改原形的话。你在初始话的时候不要初始成'/0',可以使用strlen计算了。”
那么int 数组呢?
Top
cunsh(村少) ( ) 信誉:96 Blog 2006-8-25 16:55:01 得分: 2
c语言没有模板....
Top
1byone(圣域守望者) ( ) 信誉:100 Blog 2006-8-25 16:57:20 得分: 1
好像是没办法,而且就是有应该也不是良好的习惯。
//上面这个回复真是胡扯//
Top
blue_zyb() ( ) 信誉:100 Blog 2006-8-25 16:57:28 得分: 2
哦,C语言啊~ 没法子呗。。
Top
tailzhou(尾巴) ( ) 信誉:100 Blog 2006-8-25 16:58:14 得分: 8
用一个特殊字符作数组数据结束符;
或者
干脆把第一个元素的值用来表示元素的个数,不作数据用途
不过都变态的很。
Top
aminconi(完美缺陷) ( ) 信誉:100 Blog 2006-8-25 16:59:36 得分: 2
数组的调用是通过指针传递的
如果楼主真想在函数体内使用数组个数,我想最好的办法就是在函数体外传递sizeof(ca_test)/sizeof(char)
Top
netliuming(你有安全感吗?) ( ) 信誉:100 Blog 2006-8-25 17:15:28 得分: 2
C没法实现,一般这种传法,都会带上大小参数一起