首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

两个n不一样,迷茫解决办法

2012-03-08 
两个n不一样,迷茫#includeiostreamusing namespace stdvoid strcpy(char a[], char b[])int main(){ch

两个n不一样,迷茫
#include<iostream>
using namespace std;
void strcpy(char a[], char b[]);
int main()
{
  char b[]="3349kj"; char a[50];
  int n;
  n=sizeof(b)/sizeof(char);
  cout<<n<<endl;
  strcpy(a,b);
  return 0;
}
void strcpy(char a[], char b[])
{
  int n;
  n=sizeof(b)/sizeof(char);
  cout<<n<<endl;
  for(int i=0;i<n;i++)
  a[i]=b[i];
  for(i=0;i<n;i++)
  cout<<a[i];
cout<<endl;
}
函数main和函数strcpy中的n值竟然不一样,很奇怪,哪位高手指点下

[解决办法]
strcpy中的sizeof(b) b被当作指针了,所以长度是4
[解决办法]
当数组作为函数的参数进行传递时,该数组自动退化为同类型的指针
[解决办法]
char b[]相当一个指针,sizeof(b)相当取一个地址的大小,你的系统默认地址长度为4,所以输出为4
[解决办法]
接一楼补充:
strcpy中的sizeof(b) b被当作指针了,指向的是main()中b的char数组指针。
明白吗?
[解决办法]
数组如果做为函数的参数的话
会被弱化为一个指针的
而sizeof(指针)结果可想而知
[解决办法]
一样的答案不要说这么多遍嘛!
我就不多说,lz看着给点分吧,哈哈...
[解决办法]
楼上的都说了,楼主顺便给点分吧!谢了!
[解决办法]

[解决办法]
数组如果做为函数的参数的话 
会退化为一个指针

热点排行