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;
}

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

猜你喜欢

转载自blog.csdn.net/qq_39131699/article/details/83216300