指针基础:区分&i, *p 与 p

我们定义 int *p=&i , 则有:

&i :

  1. &是取地址运算符,&i 表示取i的地址。
  2. 使用%p输出。

*p :

  1. 表示指向存储i的地方,引导我们找到 i。
  2. 使用 %b 输出,会输出 i 的值。
  3. 但如果我们要给 *p 赋值,我们要给它一个地址,而不是值。

p :

  1. 指针变量名。
  2. 使用%d输出时会得到一串没有意义的数字。
  3. 用 %p 输出时会输出 i 的地址。
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>


void f(int *p, int* q);//我传进来的是一个地址 p=&i
void g(int k);//k=i

int main(void)
{
	int i = 6,*p=&i;
	int j = 3,*q=&j;
	printf("i=%d\n", i);//输出了i=6
	printf("&i=%p\n", &i);//输出&i=000000A75BBBFBA4
	printf("p=%d\n", p);//p=%d输出了p=1539046308,显然这只是一串没有意义的数字
	printf("p=%p\n", p);//p=%p输出了p=000000A75BBBFBA4,显然这是地址,而且是&i的地址
	printf("*p=%d\n", *p);//输出*p=6
	
	printf("j=%d\n", j);
	printf("&j=%p\n", &j);
	printf("q=%d\n", q);
	printf("*q=%d\n", *q);

	printf("through the f()and g()\n");
	f(&i,q);
	g(i);
	

	return 0;
}

void f(int* p,int *q)
{
	printf("p=%p\n", p);//p的值就是i的地址
	printf("*p=%d\n", *p);
	*p = *q;
	printf("经过*p = *q之后,*p=%d\n", *p);
}

void g(int k)
{
	printf("k=%d\n", k);
}
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>


void swap(int* pa, int* pb);

int main(void)
{
	int a = 5;
	int b = 6;
	int* pa=&a, * pb=&b;
	printf("&a=%p &b=%p\n", &a, &b);
	printf("pa=%p pb=%p\n", pa, pb);
    printf("a=%d.b=%d\n", a, b);
	
	swap(&a, &b);
	printf("&a=%p &b=%p\n", &a, &b);
	printf("pa=%p pb=%p\n", pa, pb);
	printf("a=%d.b=%d\n", a, b);

	return 0;//结果仍然只是a,b的结果互换了,并不是位置互换
}

void swap(int *pa,int *pb)
{
	int t = *pa;
	*pa = *pb;
	*pb = t;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值