为什么数组参数的大小与main中的大小不同?

为什么数组参数的大小与main中的大小不同?

为什么作为参数发送的数组的大小与main中的相同?

#include <stdio.h>void PrintSize(int p_someArray[10]);int main () {
    int myArray[10];
    printf("%d\n", sizeof(myArray)); /* As expected, 40 */
    PrintSize(myArray);/* Prints 4, not 40 */}void PrintSize(int p_someArray[10]){
    printf("%d\n", sizeof(p_someArray));}


慕工程0101907
浏览 561回答 4
4回答

小唯快跑啊

将数组类型传递给函数时,会隐式转换为指针类型。所以,void&nbsp;PrintSize(int&nbsp;p_someArray[10])&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;printf("%zu\n",&nbsp;sizeof(p_someArray));}和void&nbsp;PrintSize(int&nbsp;*p_someArray)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;printf("%zu\n",&nbsp;sizeof(p_someArray));}是等价的。所以你得到的是价值sizeof(int*)

拉风的咖菲猫

它是一个指针,这就是为什么它是一个常见的实现,将数组的大小作为第二个参数传递给函数

杨魅力

正如其他人所说,当用作函数参数时,数组会衰减到指向第一个元素的指针。还值得注意的是,sizeof不评估表达式,并且在与表达式一起使用时不需要括号,因此您的参数实际上根本不被使用,因此您也可以使用类型而不是值来编写sizeof。#include&nbsp;<stdio.h>void&nbsp;PrintSize1&nbsp;(&nbsp;int&nbsp;someArray[][10]&nbsp;);void&nbsp;PrintSize2&nbsp;(&nbsp;int&nbsp;someArray[10]&nbsp;);int&nbsp;main&nbsp;(){ &nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;myArray[10]; &nbsp;&nbsp;&nbsp;&nbsp;printf&nbsp;(&nbsp;"%d\n",&nbsp;sizeof&nbsp;myArray&nbsp;);&nbsp;/*&nbsp;as&nbsp;expected&nbsp;40&nbsp;*/ &nbsp;&nbsp;&nbsp;&nbsp;printf&nbsp;(&nbsp;"%d\n",&nbsp;sizeof&nbsp;(&nbsp;int[10]&nbsp;)&nbsp;);&nbsp;/*&nbsp;requires&nbsp;parens&nbsp;*/ &nbsp;&nbsp;&nbsp;&nbsp;PrintSize1&nbsp;(&nbsp;0&nbsp;);&nbsp;/*&nbsp;prints&nbsp;40,&nbsp;does&nbsp;not&nbsp;evaluate&nbsp;0[0]&nbsp;*/ &nbsp;&nbsp;&nbsp;&nbsp;PrintSize2&nbsp;(&nbsp;0&nbsp;);&nbsp;/*&nbsp;prints&nbsp;40,&nbsp;someArray&nbsp;unused&nbsp;*/}void&nbsp;PrintSize1&nbsp;(&nbsp;int&nbsp;someArray[][10]&nbsp;){ &nbsp;&nbsp;&nbsp;&nbsp;printf&nbsp;(&nbsp;"%d\n",&nbsp;sizeof&nbsp;someArray[0]&nbsp;);}void&nbsp;PrintSize2&nbsp;(&nbsp;int&nbsp;someArray[10]&nbsp;){ &nbsp;&nbsp;&nbsp;&nbsp;printf&nbsp;(&nbsp;"%d\n",&nbsp;sizeof&nbsp;(&nbsp;int[10]&nbsp;)&nbsp;);}

江户川乱折腾

因此,您需要将数组的长度作为第二个参数传递。当您编写代码时,您既要声明一个常量大小的数组,然后将该数组传递给函数,那么让数组长度常量显示在代码中的几个位置是很痛苦的...K&R救援:#define&nbsp;N_ELEMENTS(array)&nbsp;(sizeof(array)/sizeof((array)[0]))所以现在你可以这样做:int&nbsp;a[10];...myfunction(a,&nbsp;N_ELEMENTS(a));
打开App,查看更多内容
随时随地看视频慕课网APP