博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
指针参数传递
阅读量:6564 次
发布时间:2019-06-24

本文共 1823 字,大约阅读时间需要 6 分钟。

1、指针作为参数传递进去的仅仅只是指针的值,而不是指针的地址,或者说只是指针的一份拷贝,例如:

void pointer(int *p){  int a = 11;  printf("\nthe p is %p , addr is %d, *p is %d",p , &p, *p);  *p =11;  printf("\nthe p is %p , addr is %d, *p is %d",p , &p, *p);  p = &a;  printf("\nthe p is %p , addr is %d, *p is %d",p , &p, *p);}int main(){ int b =22; int *p = &b; printf("\nthe p is %p , addr is %d, *p is %d",p , &p, *p); pointer(p); printf("\nthe p is %p , addr is %d, *p is %d",p , &p, *p);}the p is 0xbfd46498 , addr is -1076599652, *p is 22the p is 0xbfd46498 , addr is -1076599680, *p is 22the p is 0xbfd46498 , addr is -1076599680, *p is 11the p is 0xbfd4646c , addr is -1076599680, *p is 11the p is 0xbfd46498 , addr is -1076599652, *p is 11

1、例子中,指针p的拷贝传入了方法中(其地址变了,说明是另一变量;值和指向的内存块数据没变)

2、将p的拷贝视作p1,p1改变了其所指向的内存块的值为11

3、p1的值改变为a的地址,即p1指向a,此时p1与p分别指向不同的内存块了,不会互相影响

4、方法结束,p地址和值没变(改变的仅仅是p的拷贝p1),但是p所指向的内存块数据被p1所改变了,故*p为11

总结:传入的指针仅仅是一个拷贝,方法不会改变原指针的地址、值,但是可能会改变原指针所指向内存块的数据。

 

值互换的两种那个方式

void swap(int *a , int *b)//使用指针方式修改指向内存块的值, 传值方式{
  printf("\n a addr : %d , b addr: %d", &a , &b); int temp = *a; *a = *b; *b = temp;}void swap(int &a , int &b)//使用引用方式,串引用方式{
  printf("\n a addr : %d , b addr: %d", &a , &b); int temp = a; a = b; b = temp;} int a=3 , b=5;  printf("\n a addr : %d , b addr: %d", &a , &b); printf("\n a : %d , b : %d", a , b); swap(&a , &b); printf("\n a : %d , b : %d", a , b); printf("\n a : %d , b : %d", a , b); swap(a , b); printf("\n a : %d , b : %d", a , b);  a addr : -1076189224 , b addr: -1076189220  a : 3 , b : 5  a addr : -1076189248 , b addr: -1076189244  a : 5 , b : 3  a : -1076189224 , b : -1076189220  a addr : -1076189224 , b addr: -1076189220  a : -1076189224 , b : -1076189220 总结:方法一传入的是 a、b变量地址的拷贝,也叫传值;      方法二传入的是变量a、b,而不是拷贝(地址相同),又叫传引用。

转载于:https://www.cnblogs.com/lipeil/archive/2012/10/26/2740729.html

你可能感兴趣的文章
ZBar之ZBarReaderViewController
查看>>
Nuget~管理自己的包包~丢了的包包快速恢复
查看>>
$.extend({},defaults, options) --(初体验三)
查看>>
jQuery hover() 方法
查看>>
android 一步一步教你集成tinker(热修复)
查看>>
到底有多少内存
查看>>
centos7.3 安装ovirt-engine4.0 版本
查看>>
Jenkins+git+tomcat 自动化持续部署
查看>>
项目log日志打印
查看>>
Openstack的环境的Mitaka部署环境服务,实例(1)
查看>>
文档的压缩与打包
查看>>
python3 在不同操作系统安装第三方库方法
查看>>
redhat5.8+mfs(提供软件包文档)
查看>>
python编写登录接口
查看>>
MySQL高可用方案之多级复制
查看>>
OVS 中的各种网络设备 - 每天5分钟玩转 OpenStack(128)
查看>>
Python火车票代码
查看>>
Android开发者指南(7) —— App Install Location
查看>>
Trafficserver Cluster模式
查看>>
亚马逊推出 Blox,用于 EC2 容器服务的开源工具集合
查看>>