指针参数传递

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 22
the p is 0xbfd46498 , addr is -1076599680, *p is 22
the p is 0xbfd46498 , addr is -1076599680, *p is 11
the p is 0xbfd4646c , addr is -1076599680, *p is 11
the 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,而不是拷贝(地址相同),又叫传引用。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值