C语言学习第12篇--- 一维指针及数组做函数参数剖析
【摘要】
知识来源主要是陈正冲老师的《C语言深度解剖》及Delphi Tang老师的《C语言剖析》,有兴趣的朋友可以看我置顶文章获取
只是记录学习记录,方便查看,资料来源网络。
获取一块内存的方法,有两个方法
一维指针做函数参数
第一:return
char*GetMemory(char * p,intnum) { p=...
知识来源主要是陈正冲老师的《C语言深度解剖》及Delphi Tang老师的《C语言剖析》,有兴趣的朋友可以看我置顶文章获取
只是记录学习记录,方便查看,资料来源网络。
获取一块内存的方法,有两个方法
一维指针做函数参数
第一: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;
-
-
}
这个方法简单,容易理解。
第二:用二级指针。
-
voidGetMemory(char ** p,intnum)
-
-
{
-
-
*p=(char*)malloc(num*sizeof(char));
-
-
returnp;
-
-
}
-
-
intmain()
-
-
{
-
-
char*str=NULL;
-
-
GetMemory(&str,10);
-
-
strcpy(str,”hello”);
-
-
free(str);
-
-
return0;
-
-
}
注意,这里的参数是&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;
-
}
运行完全没有问题。实际传递的数组大小与函数形参指定的数组大小没有关系。既然
如此,那我们也可以改写成下面的样子:
-
voidfun(chara[])
-
{
-
charc = a[3];
-
}
改写成这样或许比较好,至少不会让人误会成只能传递一个10个元素的数组。
文章来源: allen5g.blog.csdn.net,作者:CodeAllen的博客,版权归原作者所有,如需转载,请联系作者。
原文链接:allen5g.blog.csdn.net/article/details/79120097
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)