C语言学习第12篇--- 一维指针及数组做函数参数剖析

举报
CodeAllen 发表于 2021/10/30 00:31:48 2021/10/30
【摘要】 知识来源主要是陈正冲老师的《C语言深度解剖》及Delphi Tang老师的《C语言剖析》,有兴趣的朋友可以看我置顶文章获取   只是记录学习记录,方便查看,资料来源网络。 获取一块内存的方法,有两个方法 一维指针做函数参数 第一:return char*GetMemory(char * p,intnum) { p=...

知识来源主要是陈正冲老师的《C语言深度解剖》及Delphi Tang老师的《C语言剖析》,有兴趣的朋友可以看我置顶文章获取

 

只是记录学习记录,方便查看,资料来源网络。

获取一块内存的方法,有两个方法

一维指针做函数参数

第一:return


  
  1. char*GetMemory(char * p,intnum)
  2. {
  3. p=(char*)malloc(num*sizeof(char));
  4. returnp;
  5. }
  6. intmain()
  7. {
  8.     char*str=NULL;
  9.     str=GetMemory(str, 10) ;
  10.     strcpy(str,”hello”);
  11.     free(str);
  12.     return0;
  13. }

这个方法简单,容易理解。

 

第二:用二级指针。


  
  1. voidGetMemory(char ** p,intnum)
  2. {
  3. *p=(char*)malloc(num*sizeof(char));
  4. returnp;
  5. }
  6. intmain()
  7. {
  8. char*str=NULL;
  9. GetMemory(&str,10);
  10. strcpy(str,”hello”);
  11. free(str);
  12. return0;
  13. }

 

注意,这里的参数是&str 而非 str。这样的话传递过去的是 str 的地址,是一个值。在函数内部,用钥匙(“*”)来开锁: *(&str),其值就是 str。所以 malloc 分配的内存地址是真正赋值给了 str 本身。

 

 

数组作函数参数:只传递地址,将数组第一个元素指针传递到函数中

C 语言中,当一维数组作为函数参数的时候,编译器总是把它解析成一个指向其首元素首地址的指针。

同样的,函数的返回值也不能是一个数组,而只能是指针。


函数本身是没有类型的,只有函数的返回值才有类型

 


  
  1. /*2018年1月18日13:12:45
  2.  *测试代码
  3. */
  4. voidfun(char*p)
  5. {
  6. charc = p[3];//或者是 char c = *(p+3);
  7. }
  8. 同样,你还可以试试这样子:
  9. voidfun(chara[10])
  10. {
  11. charc = a[3];
  12. }
  13. intmain()
  14. {
  15. charb[100]=“abcdefg”;
  16. fun(b);
  17. return0;
  18. }

运行完全没有问题。实际传递的数组大小与函数形参指定的数组大小没有关系。既然
如此,那我们也可以改写成下面的样子:

 


  
  1. voidfun(chara[])
  2. {
  3. charc = a[3];
  4. }


改写成这样或许比较好,至少不会让人误会成只能传递一个10个元素的数组。
 

 

文章来源: allen5g.blog.csdn.net,作者:CodeAllen的博客,版权归原作者所有,如需转载,请联系作者。

原文链接:allen5g.blog.csdn.net/article/details/79120097

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。