c语言(指针)

#include <stdio.h>

//指针就是地址;指针变量是存放地址的变量
//*有两个作用:标识作用和运算作用
int main()
{
	int a = 10;
	int *p;
	p = &a;
	printf("值:%d \n",a);
	printf("地址:%p \n",&a);
	printf("值:%d \n",*(&a));//*是取值符号,把后面跟的内存地址中的数据取出来
	printf("值:%d \n",*p);
	return 0;
}
#include <stdio.h>

//该实验用来观察不同类型的指针变量
//该试验说明定义指针时类型要一致
int main()
{
	int a = 0x1234;
	int *p = &a;
	char *c = &a;
	
	printf("int类型 的地址:%p\n",p);
	printf("char类型 的地址:%p\n",c);
	//发现地址一样
	
	printf("int类型的值:%x\n",*p);
	printf("char类型的值:%x\n",*c);
	//int占4个字节,32位;所以可以全部显示出来
	//char占1个字节,8位;所以只能显示一部分
	
	printf("++p = %p\n",++p);
	printf("++c = %p\n",++c);
	//发现类型不同,跨越字长也不一样
	
	return 0;
}

指针的用处1:下面例子,可以更好理解

#include <stdio.h>


void change(int data1,int data2)
{
	int temp;
	temp = data1;
	data1 = data2;
	data2 = temp;
}

int main()
{
	int data1 = 1;
	int data2 = 2;
	
	printf("交换前:data1=%d,data2=%d\n",data1,data2);
	change(data1,data2);
	printf("交换前:data1=%d,data2=%d\n",data1,data2);
	
	return 0;
}

通过上面代码可以发现,通过调用封装后的交换函数并不能真正实现调换,因为函数内的data1和data2的内存地址与main函数中的data1和data2中的内存地址并不一样,要想实现调换需要利用指针。如下:

#include <stdio.h>


void change(int *data1,int *data2)
{
	int temp;
	temp = *data1;
	*data1 = *data2;
	*data2 = temp;
}

int main()
{
	int data1 = 1;
	int data2 = 2;
	
	printf("交换前:data1=%d,data2=%d\n",data1,data2);
	change(&data1,&data2);
	printf("交换前:data1=%d,data2=%d\n",data1,data2);
	
	return 0;
}

指针用处2:指向固定区域

#include <stdio.h>

//指针在这里用做指向固定的区域
int main()
{
	int a = 10;
	printf("地址是:%p\n",&a);
	unsigned int* p = (unsigned  int*)0x000000000061FE33;
	//上面这一句跟float a = (float)sizeof(arr)/sizeof(arr[0])差不多一个道理
	printf("地址是:%p\n",p);
	return 0;
}

例:

#include <stdio.h>

//输入三个数abc;不管怎么输入,输出时,abc有从小到大输出,用函数封装实现
void sort(int *a,int *b,int *c)
{
	int temp;
	if(*a>*b)
	{
		temp = *a;
		*a = *b;
		*b = temp;
	}
	if(*a>*c)
	{
		temp = *a;
		*a = *c;
		*c = temp;
	}
	if(*b>*c)
	{
		temp = *b;
		*b = *c;
		*c = temp;
	}	
}

int main()
{
	int a,b,c;
	
	printf("请依次输入abc值:\n");
	scanf("%d%d%d",&a,&b,&c);
	sort(&a,&b,&c);
	printf("a=%d,b=%d,c=%d",a,b,c);
	return 0;
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值