指针运算符与函数副本机制

 不可以改变数据

#define _CRT_SECURE_NO_WARNINGS

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<Windows.h>

void change1(int a, int b)	  //副本机制	 ,需要改变函数外部变量
{
	printf("\n");

	int temp = a;
	a = b;
	b = a;
	printf("\n%p,%p", &a, &b);
}

可以改变数据 

void change2(int *   p1, int *     p2)	  //副本机制	 ,需要改变函数外部变量
{
	printf("\n");

	printf("\n change2 *p1, *p2=%d,%d", *p1, *p2);//指针也有副本机制,通过指向操作两个数据
	printf("\n change2 p1 p2=%p,%p", p1, p2);//指针也有副本机制,通过指向操作两个数据
    //指针也有副本机制,通过指向操作两个数据
	
    int p;
	p = *p1;
	*p1 = *p2;
	*p2 = p;
	
    printf("\n change2 *p1, *p2=%d,%d", *p1, *p2);//指针也有副本机制,通过指向操作两个数据
	printf("\n change2 p1 p2=%p,%p", p1, p2);//指针也有副本机制,通过指向操作两个数据
	//指针也有副本机制,通过指向操作两个数据

	
}

不可以改变数据

void change4(int *  p1, int * p2)
{
	printf("\n");

	int *ptemp;
	ptemp = p1;
	p1 = p2;
	p2 = ptemp;
}

 主函数

void main()
{
	int a;
	int b;
	int *pa = &a, *pb = &b;
	scanf("%d%d", pa, pb);
	printf("\na b =%d,%d", a, b);
	printf("\n*pa *pb =%d,%d", *pa, *pb);

    //change1(a, b);
	//change2(pa, pb);	//本质交换地址	只有传递地址才可以
	change4( pa, pb);

	printf("\na b =%d,%d", a, b);
	printf("\n*pa *pb =%d,%d", *pa, *pb);

	system("pause");
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值