C语言函数函数传递连续空间的定义,一般的连续空间有结构体和数组,传递的方式一般大多数都会使用地址传递,为什么?接下来我会给大家分析为什么使用地址传递。
1.连续空间如结构体和数组
使用结构体作为连续空间传递应该用结构体指针的方式
例如:
void fun(abc *c)
{
}
也可以用结构体的方式:
void fun(abc c)
{
}
以上两种方式的区别在于,结构体指针的方式和结构体的方式去传递连续空间的时候,结构体的方式每次都会开辟一整块的地址,非常浪费内存,而结构体指针的方式不会
连续空间传递数组也是一样,尽量用指针的方式去传递
2.地址传递函数的只读性,和读写特性
例如一个函数:
void fun(const char *buf)
{
}
上面这个函数的输入参数为:const char *buf,说明这一段空间是只读可性不能被修改,否者出现段错误。
接下来分析一个一个函数传递参数的读写特性例如以下代码:
void fun(char *buf)
{
}
上面这个函数的输入参数为:char *buf,说明这一段空间是读写特性,给用户可读可写。
通过以上两个例子,可知道在连续空间传递地址的时候什么时候用只读特性或者读写特性
例如C语言标准库中的 char *strcpy(char *dest,const char *src);
这个函数中第一个是读写特性,第二个参数为只读特性