您的位置:首页 > 其它

a[9]与9[a]的确是相同的,以及函数内部如何得到传入数组参数的大小

2006-09-13 11:31 507 查看
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)
)
{
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没法实现,一般这种传法,都会带上大小参数一起

Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1124417
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: