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的信息。传这个结构体进去。这样只需要一个参数

posted @ 2022-05-06 11:35  然终酒肆  阅读(106)  评论(0编辑  收藏  举报