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

                                   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没法实现,一般这种传法,都会带上大小参数一起



Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1124417

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值