指针小笔记
来源:互联网 发布:深入浅出mysql 第3版 编辑:程序博客网 时间:2024/05/11 03:21
例1:
void func(char *ptr){ ptr = "world";}int main(int argc, char *argv[]){ char *str = "hello"; func(str); printf("*str = %s\n", str); return 0;}
(1)"hello","world"都在常量区,
假设"hello"的地址为0x0040A064,"world"的地址为0x0040A06A
(2)main函数中,指针str指向地址0x0040A064,
调用函数func,将这个地址作为参数传进去
(3)func函数中,指针ptr也指向地址0x0040A064,
在函数中改变了指针的值,让其指向了地址0x0040A06A
(4)func函数结束,局部变量 指针ptr被销毁
(5)回到main函数中,指针str依然指向地址0x0040A064,
输出的还是"hello"
例2:
void func(char **ptr){ *ptr = "world";}int main(int argc, char *argv[]){ char *str = "hello"; func(&str); printf("*str = %s\n", str); return 0;}
(1)"hello","world"都在常量区,
假设"hello"的地址为0x0040A064,"world"的地址为0x0040A06A
(2)main函数中,指针str指向地址0x0040A064,
而str本身的地址:&str=0x0056FF38(假设),将这个值作为参数传进func函数
(3)func函数中,指针ptr指向地址0x0056FF38,
*ptr还是一个指针,*ptr=0x0040A064,
函数内部改变了*ptr的值,*ptr=0x0040A06A,即改变了地址0x0056FF38中的值,现在内存单元0x0056FF38中存放的是0x0040A06A
(4)func函数结束,局部变量被销毁
(5)由于在func函数中改变了内存单元0x0056FF38中的值,即str现在指向地址0x0040A06A,也就是"world"所在地址,
此时的输出为"world"
参考下图:
0 0
- 指针小笔记
- 指针小笔记
- 指针小笔记1
- [C++]cpp小笔记3 --- C++数组, 数组指针
- 关于数据类型与指针的小笔记--初始化问题&&数组
- c笔记11---联合,枚举,堆 malloc,大/小端存储,二级指针,函数指针,qsort 排序,指针数组
- 指针笔记
- 指针笔记
- 指针 笔记
- 指针笔记
- 笔记--------指针
- 指针笔记
- 指针笔记
- 指针笔记
- 指针笔记
- 指针笔记
- 指针笔记
- 指针笔记
- "Loading data for Android 5.0" has encountered a problem. Parsing Data for android-21 failed uns
- 在qemu中用tun/tap设备与宿主机通讯
- Java tutorial 2
- android存储之网络存储和数据库存储
- JS对日期按照指定格式进行格式化
- 指针小笔记
- Android 图片在SD卡及包下的存储
- 判断jQuery对象或dom对象是否存在
- TCP/IP网络编程 学习笔记_2 --套接字类型与协议设置
- 理解java泛型的简单示例
- Windows 编程- 生成窗口程序
- 多线程第六篇 经典线程同步之事件Event
- Linux SVN服务器做定时全量备份脚本
- EJB3.0注解:@Column length