C指针入门

指针是C语言最重要的概念之一,用于存储变量的地址,同C语言中其他变量一样,把指针也看成是一种变量即可。

一,查找地址:&运算符

如果主调函数不使用return返回的值,则必须通过地址才能修改主调函数中的值。

我们可以用一元&运算符和%p给出变量的存储地址

#include<stdio.h>
void mikado(int);
int main()
{
	int pooh = 2, bah = 5;
	printf("In mian(),pooh= %d and &pooh= %p\n", pooh, &pooh);
	printf("In mian(),bah= %d and &bah= %p\n", bah, &bah);
	mikado(pooh);
	return 0;
}

void mikado(int bah)
{
	int pooh = 0;
	printf("In mian(),pooh= %d and &pooh= %p\n", pooh, &pooh);
	printf("In mian(),bah= %d and &bah= %p\n", bah, &bah);
}

结果

该例说明了两个函数中的同名变量的地址和值不相同,计算机把两个pooh和两个bah看作四个独立的变量;其次,函数调用的时候传递的是值。涉及的两个变量并未改变。原因是:C程序在调用函数时使用“按值调用”,这意味着变量的值直接从调用函数复制到被调函数的实参中,“按值调用”是C语言中调用函数的唯一方式。

一个例子

假设我们需要一个交换两个变量的函数

void swap(int x, int y)
{
    int tmp = x;
    x = y;
    y = tmp;    
}
void change()
{
    int a = 100;
    int b = 200;
    swap(a, b);
}

 运行会发现两个变量的值并未交换。前面提到过,函数只可以传递值,我们的确可以返回一个指定的值,但是return语句只能把被调函数的一个值传回主调函数,但我们需要传回两个函数,C语言的函数可以做到这一点,但是需要使用指针;

二,间接运算符*(指针声明

指针也是一种变量类型,只是声明指针变量的形式稍微复杂一点,以指向int为例

int  cat,dog=250;

1.创建指针变量:基本类型+*—— int* ptr;

2.给指针变量赋值:&+变量—— ptr =&dog; //把dog的地址赋给指针变量,这里用到&运算符,对于这条语句,我们说ptr指向dog,这里的ptr是一个可修改的左值,而&dog是一个常量;

3.找出指针变量保存的地址中值:*+指针变量——cat=*ptr;  //不要把间接运算符和二元乘法运算符混淆,虽然它们使用的符号相同,但语法功能不同;

以上语句 ptr=&dog; 和 cat=*ptr;放在一起相当于cat=dog; 由此可见,是用地址和间接运算符可以间接完成上面这条语句的功能。

小结:指针相关运算符

地址运算符&:后跟一个变量名时,&给出该变量的地址。

间接(解引用)运算符*:后跟一个指针名或地址时,*给出存储在指针指向地址上的值;

回到那个例子

我们刚刚接触指针,并可以利用指针解决函数间的通信问题,将交换变量的函数进行修改

void swap(int* x, int* y)
{
    int tmp = *x;
    *x = *y;
    *y = tmp;   
}
void change()
{
    int a = 100;
    int b = 200;
    swap(&a, &b);
}

普通变量把值作为基本量,把地址作为通过&运算符获得的派生量,而指针变量把地址作为基本量,把值作为通过*运算符获得的派生量。

虽然打印地址可以满足好奇心,但这不是&运算符的主要用途,更重要的时使用&,*,和指针可以操纵地址和地址上的内容。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

vⅤ_Leon

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值