c语言sizeof数组:函数调用fwrite(&bk1,sizeof(bk1),1,fp);中第三个参数1表示什么意思

为什么把sizeof放在函数中求不出数组嘚大小啊

首先你下面两个说5261法是错误的。

1.数组名a只是数组第4102一个元素的地址

数组名a只是和1653第一个元素的地址的值相同而已

2.为什么sizeof()根据数组第一个元素的地址就可以得到整个数组的大小?

sizeof()是不能根据数组第一个元素的地址就可以得到整个数组的大小的


总结一下:sizeof函數是根据参数的类型算出size的,并不是根据参数的值

还有就是你混淆了数组名的概念,你例子中的a是一个数组的名称


数组a,a中有整个数组的信息

至于为什么sum(int a[])中求不到main中的数组大小,因为在sum函数中看到的

只是输入参数int a[],它并不是一个数组的类型(即使你在[]中写入数字也

会被无视的!)其实和 sum(int *a)的函数宣言是一样的参数类型只是简单

的int的型指针而已。

西sum中的a,在栈上分配有4个字

节的内存空间4102,它是一个指针形的1653变量囷主函数中的a的唯一的一点关系就是

它的值存的是函数中a数组的地址,既然sum中的a是一个指针那么sizeof(指

sizeof能判断出这4102是一1653个int数组名,能够计算出这个数组使用的空间的大小

当数组名作为参数传递时数组名退化为指针,int sum(int a[])

中的a并不是一个数组而是一个指针虽然形式上看上去像┅个数组。这里面sizeof(a)的大小不是一个int的大小而是一个指针的大小,与int刚好大小相同

内存有没有被使用都是有标记的,int 数组是连续的空间从起始地址到结束地址,这段连续的被使用的空间的大小就是sizeof的结果

下载百度知道APP,抢鲜体验

使用百度知道APP立即抢鲜体验。你的手機镜头里或许有别人想知道的答案

解释:我们要知道的是:sizeof 返回的昰一个unsinged int的值!那么在for循环的时候i = -1就会向后面转型,将其值转化为sizeof的值那么我们很清楚,-1转化的sizeof的值是很大的一个正整数!那么很显然僦直接不符合i <= ( NUM - 2 )的条件了所以就不会输出!!!

为什么第三个还是输出10呢?!
解释:解决这个问题就是要理解编译器编译原理 我们要知噵sizeof仅仅是一个操作符而已并不是函数,sizeof要做的仅仅是获得i++的字节数那么所以在编译的时候就直接用4代替了i++了,反正编译器知道结果都是┅样所以最终i++并没有执行!

我要回帖

更多关于 c语言sizeof数组 的文章

 

随机推荐