详解C语言中&的使用(取地址符)

什么是取地址符

顾名思义,就是获取当前变量的内存地址,想要获得那个变量的地址,就用&后面跟上那个变量。

使用方法

在输出的时候后面跟上变量名就行,看一下这个例子:

#include <stdio.h>			//头文件
#include <windows.h>

struct player				//定义结构体
{
	int x;					//定义变量
	int y;
};
char a;						//定义变量
short b;
int c;


void main()					//程序入口
{
	a = 1;					//给变量赋值
	b = 2;
	c = 3;
	player p = {10,20};

	printf("%x %x %x %x \n",&a,&b,&c,&p);	//输出变量内存地址
	return;					//程序结束
}

运行结果:
在这里插入图片描述内存地址输出了,我们去反汇编看一下:
在这里插入图片描述
注:&后只能跟变量,不能跟常量,因为常量是一个立即数,不是容器,没有地址。

探测&变量的类别

看一下代码:

#include <stdio.h>
#include <windows.h>

char a;
int x = &a;

void main()
{
	return;
}

这样运行是会报错的:
在这里插入图片描述这里的意思是:没有办法把char* 转换成int,那这里x是int,&a就是char了,他在我们原来定义的类型基础上加了一个,我们在做实验,把char a改为char* a试一下:

#include <stdio.h>
#include <windows.h>

char* a;
int x = &a;

void main()
{
	return;
}

运行结果:
在这里插入图片描述这里可以得出结论,如果变量类型对不上,他就会在原先变量类型的基础上加一个*

指针变量赋值

结合上面的实验,我们可以写出这段代码:

#include <stdio.h>
#include <windows.h>

char x;
char* p1;
char** p2;
char*** p3;
char**** p4;


void main()
{
	p1 = &x;		//char*
	
	p2 = &p1;		//char**
	
	p3 = &p2;		//char***
	
	p4 = &p3;		//char****

	return;
}

运行结果:
在这里插入图片描述这样就不会报错了,这是因为我们赋的值刚好跟目标类型对应起来了。

发布了69 篇原创文章 · 获赞 81 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_43573676/article/details/105318954