C语言深度解剖(精讲版)——读书笔记21 &&自己的一些理解
来源:互联网 发布:vm虚拟机 for mac 编辑:程序博客网 时间:2024/05/17 08:42
第4章 指针和数组
一.一级指针参数
1.能否把指针变量本身传给一个函数
例:
void fun(char *p)
{
char c= p[3];
}
int main()
{
char *p2= "abcdefg";
fun(p2);
retrun 0;
}
这个函数调用真的把p2本身传递到了fun函数内部吗?
解析:p2是main函数内的一个局部变量,它只在main函数内部有效。既然它是内部函数,fun函数肯定无法使用p2的真身。那函数调用怎么办?好办:对实参做一份备份并传递给被调用函数,即对p2做一份备份,假设其设备名为_p2,那么传递到函数内部的就是_p2而非p2本身。
2.无法把指针变量本身传递给一个函数
fun函数实际运行时,用到的都是_p2这个变量而非p2本身。
void GetMemory(char *p ,int num)
{
p = (char *) malloc(num *sizeof(char));
}
int main()
{
char *str =NULL;
GetMemory(str ,10);
strcpy(str, "hello");
free(str);
return 0;
}
在运行strcpy(str, "hello")语句的时候发生错误。这时候观察str的值,发现仍然为NULL.也就是说str本身并没有改变,我们malloc的内存的地址并没有赋给str,而是赋给了_str。而这个_str是编译器自动分配和回收的,我们根本就无法使用,所以想这样获取一块内存是不行的。
2个解决办法:
(1).用retrun
void GetMemory(char *p ,int num)
{
p = (char *) malloc(num *sizeof(char));
return p;
}
int main()
{
char *str =NULL;
GetMemory(str ,10);
strcpy(str, "hello");
free(str);
return 0;
}
(2)用二级指针
void GetMemory(char *p ,int num)
{
p = (char *) malloc(num *sizeof(char));
}
int main()
{
char *str =NULL;
GetMemory(&str ,10);
strcpy(str, "hello");
free(str);
return 0;
}
注意,这里的参数是&str而非str,这样的话传递过去的是str的地址,是一个值。在函数内部,用钥匙(“*”)来开锁:*(&str)其值就是str。所以malloc分配的内存地址是真正赋值给了str本身。
- C语言深度解剖(精讲版)——读书笔记21 &&自己的一些理解
- C语言深度解剖(精讲版)——读书笔记1 &&自己的一些理解
- C语言深度解剖(精讲版)——读书笔记2 &&自己的一些理解
- C语言深度解剖(精讲版)——读书笔记3 &&自己的一些理解
- C语言深度解剖(精讲版)——读书笔记4 &&自己的一些理解
- C语言深度解剖(精讲版)——读书笔记5 &&自己的一些理解
- C语言深度解剖(精讲版)——读书笔记6 &&自己的一些理解
- C语言深度解剖(精讲版)——读书笔记7 &&自己的一些理解
- C语言深度解剖(精讲版)——读书笔记8 &&自己的一些理解
- C语言深度解剖(精讲版)——读书笔记9 &&自己的一些理解
- C语言深度解剖(精讲版)——读书笔记10 &&自己的一些理解
- C语言深度解剖(精讲版)——读书笔记11 &&自己的一些理解
- C语言深度解剖(精讲版)——读书笔记12 &&自己的一些理解
- C语言深度解剖(精讲版)——读书笔记13 &&自己的一些理解
- C语言深度解剖(精讲版)——读书笔记14 &&自己的一些理解
- C语言深度解剖(精讲版)——读书笔记15 &&自己的一些理解
- C语言深度解剖(精讲版)——读书笔记16 &&自己的一些理解
- C语言深度解剖(精讲版)——读书笔记17 &&自己的一些理解
- Extjs4.1 环境搭建
- 首届“水果达人”邓毅专访
- java读取网络数据流不完整的问题
- save("vara.txt",[a]) 、load("vara.txt")
- exec 运行脚本文件
- C语言深度解剖(精讲版)——读书笔记21 &&自己的一些理解
- Ubuntu下的使用小技巧
- U盘量产高级玩法
- 管道系统
- c语言中swap问题小结
- 3 编程语言结构
- 谁动了我们的的电量流量:五大游戏坑电量测试
- TOMCAT如何设置虚拟目录
- 逛店宝:逛街越多 优惠越多