c 数组传参
#include<stdio.h> //接收的是num数组的首地址 void fun1(int *num){ num[0]=123; printf("sizeof(num)=%lu\n",sizeof(num)); printf("num = %p,num+1 = %p \n",num,num+1); }
//int num[] 或 int num[400] void fun2(int num[400]){ num[0]=123; // printf("sizeof(num)=%lu\n",sizeof(num)); printf("num = %p,num+1 = %p \n",num,num+1); } int main(){ int arr[400]={0}; printf("sizeof(arr)=%lu\n",sizeof(arr)); printf("arr=%p,arr+1=%p\n",arr,arr+1); printf("arr[0] = %p\n",&arr[0]); fun2(arr); return 0; }
sizeof(arr)=1600 arr=0x7ffd549cc0c0,arr+1=0x7ffd549cc0c4 arr[0] = 0x7ffd549cc0c0 num = 0x7ffd549cc0c0,num+1 = 0x7ffd549cc0c4
sizeof(arr)=1600 arr=0x7ffc09aa6e90,arr+1=0x7ffc09aa6e94 arr[0] = 0x7ffc09aa6e90 sizeof(num)=8 num = 0x7ffc09aa6e90,num+1 = 0x7ffc09aa6e94
int 占4字节
char 占1字节
double 占8字节
指针变量大小
32位操作系统 4字节
64位操作系统 8字节
int arr[400][20]={0};
void func(int num[][20])
void func(int (*num)[20])
int **p=nulll
p,p+1 相差8字节(*p=8字节)