首先函数的传参方式只有三种 : 按值传参, 按指针传参,按引用传参。
另外介绍一下sizeof 和 strlen的区别
1.sizeof 是运算符, 在编译时确定大小 。strlen是函数 ,在运行时确定大小。
2.sizeof可以用变量, 类型(如 int, char),函数( 如func() ) 做参数,strlen只能用char*做参数,且必须是以''\0''结尾的,否则就会溢出报错了。
3.数组做sizeof的参数不会退化(比如int arr[100]; sizeof(arr) = 100 * sizeof(int) = 400 ),而传给strlen的函数会退化成char * 指针。
#include <stdio.h>
#define _sizeof(T) ( (size_t)((T*)0 + 1)) // 变量
#define array_sizeof(T) ( (size_t)(&T+1) - (size_t)(&T) ) //数组
int main()
{
int a[100];
int b[10];
char *str="1234567890";
printf("%d\n", sizeof(str)); // str指针 相当于计算 sizeof(char *) = 4
printf("%d\n", sizeof(*str)); // str[0] = 1
char s[100]="1234567890";
printf("%d\n", sizeof(&s)); // sizeof(char *) = 4
printf("%d\n", sizeof(s)); // sizeof(char)*100 = 100
printf("%d\n", sizeof(*s)); // sizeof(s[0]) = sizeof(char) = 1
return(0);
}
第一种不介绍了。
第二,三种
#include <stdio.h>
#define _sizeof(T) ( (size_t)((T*)0 + 1)) // 变量
#define array_sizeof(T) ( (size_t)(&T+1) - (size_t)(&T) ) //数组
void test(short int arr[33]) //指针传参 指针 无所谓后面的大小 也可以写成 int *arr
{
printf("%d\n", sizeof(arr)); //相当于sizeof(int *)
printf("%d\n", sizeof(*arr)); //相当于arr[0]
}
void test1(int (*arr)[100]) //指针传参 指向类型为int 大小100的数组 所以必须要匹配100
{
printf("%d\n", sizeof(arr)); //输出int 指针(int *)的大小 = 4
printf("%d\n", sizeof(*arr)); //输出 *arr指向的100个int类型的数组的首地址,计算整个数据的大小 =400
}
void test2(short int (&arr)[10]) //引用传参
{
printf("%d\n", sizeof(arr)); //计算整个数组的大小
printf("%d\n", sizeof(*arr)); //arr[0] 的大小
}
int main()
{
int a[100];
short int b[10];
test(b);
test1(&a);
test2(b);
//printf("%d\n", sizeof('aabcbacc'));
return(0);
}