鱼C论坛

 找回密码
 立即注册
查看: 3933|回复: 8

关于sizeof

[复制链接]
发表于 2013-6-8 19:57:33 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include <stdio.h>
#include <iostream>
using namespace std;
void example(char Hello[])
{
printf("%d",sizeof(Hello));
}
void main()
{
char Hello[]="hello";
cout<<sizeof(Hello);
example(Hello);
system("pause");
return;
}
输出结果为6,4。为什么mian函数里输出的跟example中的结果不一样?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-6-8 20:33:38 | 显示全部楼层
唉   不知道。
帮你顶顶帖吧。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-6-8 20:42:37 | 显示全部楼层
前面输出的是字符串的字节数,后面输出的只是指针的字节数!!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-6-8 20:55:35 | 显示全部楼层
cout << sizeof(Hello); 输出的是字符数组的大小,
printf( "%d", sizeof(Hello) ); 输出的是指针的大小.
你可以声明一个字符指针变量,然后再输出试试!!!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-6-8 21:08:13 | 显示全部楼层
传到被调函数的是指针, 而在主函数的是数组名,所以sizeof 不同
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-6-8 21:13:51 | 显示全部楼层
先看看你的函数:
  1. void example(char Hello[])
  2. {
  3.         printf("%d",sizeof(Hello));
  4. }
复制代码
我们看到数组作为函数参数时无需指明它的元素数目,比如你这里的 char Hello[]就没有指定Hello的长度;也就是说数组形参可以与任意长度的数组匹配,你可能会问,参数的大小可变?这怎么通过编译?
     事实上,这种情况下的形参实际上是个指针,并不是数组,这就很好的解释了上面说的数组做参数不需要指定数组元素个数的事实。这里输出为4输出的就是char*类型指针的大小(话说指针大小一般都是固定地,你应该明白)。
所以,更准确的声明应该类似 int func(char *string);不过编译器为了让我们程序员写程序更方便 也接受
     int func(char string[]);这种类型的声明。这两种声明是等价的。
总之一句话:数组名作为函数参数传递时,传递的是指针,不是数组。
    另外,这也说明了数组和指针不是相等的(尽管大多数情况下我们都可以互换使用)
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-6-8 21:26:22 | 显示全部楼层

非常感谢,回答的很详细,我刚才自己也找到了原因所在。不过还是要感谢你
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-6-10 15:59:17 | 显示全部楼层
函数形参传入的只是一个指针变量,而实参就是实际的大小。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-6-13 20:12:54 | 显示全部楼层
学习学习。。。。。。。。。。。。。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-25 21:22

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表