说明:
本文原创作者『Allen5G』
首发于微信公众号『Allen5G』
标签:编程,软件,算法,思维
获取一块内存的方法,有两个方法
一维指针做函数参数
第一:return
char*GetMemory(char * p,intnum)
{
p=(char*)malloc(num*sizeof(char));
returnp;
}
intmain()
{
char*str=NULL;
str=GetMemory(str, 10) ;
strcpy(str,”hello”);
free(str);
return0;
}
image.gif
这个方法简单,容易理解。
第二:用二级指针。
voidGetMemory(char ** p,intnum)
{
*p=(char*)malloc(num*sizeof(char));
returnp;
}
intmain()
{
char*str=NULL;
GetMemory(&str,10);
strcpy(str,”hello”);
free(str);
return0;
}
image.gif
注意,这里的参数是&str 而非 str。这样的话传递过去的是 str 的地址,是一个值。在函数内部,用钥匙(“”)来开锁: (&str),其值就是 str。所以 malloc 分配的内存地址是真正赋值给了 str 本身。
数组作函数参数:只传递地址,将数组第一个元素指针传递到函数中
C 语言中,当一维数组作为函数参数的时候,编译器总是把它解析成一个指向其首元素首地址的指针。
同样的,函数的返回值也不能是一个数组,而只能是指针。
函数本身是没有类型的,只有函数的返回值才有类型
/*2018年1月18日13:12:45
*测试代码
*/
voidfun(char*p)
{
charc = p[3];//或者是 char c = *(p+3);
}
同样,你还可以试试这样子:
voidfun(chara[10])
{
charc = a[3];
}
intmain()
{
charb[100]=“abcdefg”;
fun(b);
return0;
}
image.gif
运行完全没有问题。实际传递的数组大小与函数形参指定的数组大小没有关系。既然
如此,那我们也可以改写成下面的样子:
voidfun(chara[])
{
charc = a[3];
}
image.gif
改写成这样或许比较好,至少不会让人误会成只能传递一个10个元素的数组。
说明
1.该文档仅供个人学习使用,版权所有,禁止商用。
2.本文由我一个人编辑并整理,难免存在一些错误。
3.为了方便大家平时公交、地铁、外出办事也能用手机随时随地查看该教程,该教程同步更新于微信公众号『Allen5G』。
关于我
我的博客:https://blog.csdn.net/super828
我的GitHub:https://github.com/lkk789
我的微信公众号(ID:Allen5G)主要分享软件工程师进阶(嵌入式,Linux,C/C++,python,英语),程序员职业发展,如果想查看更多内容,可以关注我的微信公众号『Allen5G』。
我的微信公众号(ID:Allen5G),每天分享编程,算法,软件进阶知识(嵌入式,Linux,C/C++,python,英语)。
我是Allen,世界500强外企通信软件工程师,欢迎关注我的写作365
网友评论