int *p=a和int *p=&a的区别

前言:
本文乃大一初学时写作,现在已经毕业两年多换方向了,成了前端码农,真正底层原理我现在也忘光光了,建议大家多看看多研究其他大佬的分析,别全听信本文。(也别因为这篇文章关注我了)

  指针变量用来存放指针(或者可以理解成地址)。而 & 则是取地址运算符,因此给指针变量赋值的方式一般是把变量的地址取出来,然后付给对应类型的指针变量:

int a;
int* p = &a;

上面的代码也可以写成:

int a;
int* p;
p = &a;

  需要注意的是, int* 是指针变量的类型,而后面的 p 才是变量名,用来存储地址,因此地址 &a 是赋值给 p 而不是 *p 的。
  所以,int *p中的 p 必须赋予一个地址,如果不是地址,编译器则会报错(实在不能理解的话就把地址当做一个新的类型,类型不同肯定会报错嘛 ╮( ̄▽ ̄)╭)
  当然,如果 a 代表的是数组首地址,那就另说了。下面几个例子方便理解:
int *p=a;

#include <stdio.h>
int main() {
	int a = 123;
	int *p=a;
	printf("%d\n", p);
	return 0;
}

编译结果:
在这里插入图片描述
int *p=&a;

#include <stdio.h>
int main() {
	int a = 123;
	int *p=&a;
	printf("%d\n", *p);
	return 0;
}

结果:
在这里插入图片描述
a为数组首地址时

#include <stdio.h>
int main() {
	int a[3] = {1,2,3};
	int *p=a;
	printf("%d\n", *p); //输出 a[0]
	return 0;
}

结果:
在这里插入图片描述

评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值