c 语言函数传参的sizeof问题
今天用c写服务器后端时,调用一些函数的时候出了bug。
我函数传参传的是数组、结构体等
然后在函数中用sizeof的时候我惊奇的发现居然很怪。
举个例子
#include <iostream> #include<typeinfo> #include<stdio.h> #include <string.h> using namespace std; //char str[] = "hello"; void test(char c[]) { printf("%s\n",c); printf("函数内大小: %d\n",sizeof(c)); //8 printf("函数内长度: %d\n",strlen(c)); //14 //这么神奇 } int main() { test("recv_useless_s"); char c[] = "recv_useless_s"; printf("函数外大小: %d\n",sizeof(c)); //printf("char大小: %d\n",sizeof(char *)); return 0; }
对于这个数组,函数内和函数外它的大小为什么不一样呢? 于是我写的程序也出现了bug。因为size没找对。
究其原因,c的函数参数传递是用的指针。传的并不是一个数组,虽然函数参数你写的个数组类型,是char [],不是char *。
但是他不管怎么,函数参数传的就是指针。所以函数内的sizeof( 你的char数组 ) 的大小是 char * 的大小。。。
不信 把我最后一行的注释解开,跑一跑,char *的大小就是8
可见指针真的是c的灵魂
那怎么得知数组参数的size大小。我们可以先算出sizeof再传到函数里,也就是说函数多了一个int型的参数。也可以写一个结构体,里边包括char [] 和sizeof的信息。传这个结构体进去。这样只需要一个参数