C语言 指针变量本质

C语言指针是一个经常使用的变量,可是经常在二级指针三级指针中搞混,指针的本质就是一个int型的变量,只不过这个变量是内存块的地址,通过在这个变量前面加星号可以间接的访问这个内存块的内容。通过下面的示例可以清晰的明白指针的本质,

#include <stdio.h>

typedef struct {
	int age;
	char name[110];
}teracher;

int get(teracher **p) 
{
	teracher *tem = NULL;
	
	tem = malloc(sizeof(struct teracher));
	if (tem == NULL) {
		return -1;
	}
	*p = tem;
	return 0;
}

int main(int argc char **argv)
{
	teracher *t1 = NULL;
	
	get(&t1);
	free(t1);
	return 0;
}
这个例子就是通过二级指针间接申请内存,我们看一下执行过程
先定义一个t1指针,t1的内容是空的,然后调用get()函数,将t1的地址赋值给p,这样就可以通过*p来修改t1的内容,
然后在get()函数中,定义一个tem的指针,tem内容也是空的,
然后申请一个teracher类型大小的空间,将首地址赋值给tem,这样tem就保存着刚才申请内存区的首地址,通过*tem就可以访问申请的内存区,
然后将tem的内容赋值给*p,也就是将tem的内容赋值给t1,也相当于将刚才申请的内存块首地址赋值给了t1,
这样就相当于间接申请了内存给t1.然后就可以通过*t1间接修改刚才申请内存块的值。

最后我们得到的结论就是:指针变量就是存放的地址,通过地址加*号来间接访问内存。

发布了15 篇原创文章 · 获赞 7 · 访问量 273

猜你喜欢

转载自blog.csdn.net/weixin_42397613/article/details/105301810