C语言指针初探

《 C P r i m e r P l u s 》 《C Primer Plus》 CPrimerPlus第九章“函数”部分专门讲了指针,清晰透彻,现在加入我的一点理解,进行一下总结。

ptr = &pooh;//把ptr指向pooh,或者说把pooh的地址赋值给ptr
val = *ptr;/* 找出ptr指向的值,*给出存储在指针指向的地址上的值,
              *ptr相当于获得储存在该地址的值 */
              
int* pi;//pi指向int类型
char* pc;//pc指向char类型
float* pf, * pg;//pf,pg指向float类型

解释一下下面这个:

int* pi = &bah;

相当于*pi的值是bah,是一个int类型的变量,
pi是一个指针,它的值是bah这个int类型变量的地址,

pi本身不是整数类型,它指向的值是int类型的变量

这个定义的意思是定义一个指针p(int* 意味着p是指针),它的值是bah的地址
这里的* 是声明变量的意思,与单独的 *p不同,
后者(*p)的 * 是解引用,与&(取地址符)相对应。

下面有一个非常非常经典的例子。

因为函数作为黑盒,只能传递单一的值(return),所以交换x,y的值是不能用单独的赋值函数做的,需要用到指针:

#include<stdio.h>

void interchange(int* u, int* v);

int main()
{
	int x = 5, y = 10;
	printf("Originally x = %d and y = %d\n", x, y);
	interchange(&x, &y);
	printf("Now x = %d and y = %d\n", x, y);
	return 0;
}

void interchange(int* u, int* v)
{
	int temp;
	temp = *u;
	*u = *v;
	*v = temp;
}

这里的interchange函数传递的不是x和y的值(不是5和10),而是它们的地址(00000022D02FF594和00000022D02FF5B4),进入函数后的解引用符(*)将temp赋值为00000022D02FF594这个地址上的值5,将 *u赋值为00000022D02FF5B4这个地址上的值10,然后再将 *v赋值为5,由于u和v是形式变量,实际上就是00000022D02FF594这个地址上的值改为了10,而00000022D02FF5B4这个地址上的值改为了5,也即x=10,y=5

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值