C语言学习之一级指针&二级指针

  • 一级指针:
  • 内存中每个字节都有一个编号,这个编号就是指针,也称作地址;
  • 专门用来存储地址的变量,就是指针变量;
  • 定义一级指针变量并初始化:
数据类型 *指针变量名 = &普通变量名;
数据类型 *指针变量名 = NULL;
  • 指针变量名:表示指针变量中存储的地址;

  • &指针变量名:表示指针变量本身的地址;

  • *指针变量名:表示指针变量指向的地址中的数据;

  • 二级指针:

  • 用来存储一级指针变量的地址;

  • 占用内存空间的大小:

  • 32位OS:4B;

  • 64位OS:8B;

  • 定义二级指针变量并初始化:

数据类型 **二级指针变量名 = &一级指针变量名;
数据类型 **二级指针变量名 = NULL;
  • 二级指针的用途:
int a = 20;
int *p = &a;
int **q = &p;
**q <==> *p <==> a
*q <==> p <==> &a
  • 整型变量&一级指针&二级指针的关系如图所示:

C语言学习之一级指针&二级指针_第1张图片

  • 测试代码:
#include

int main(int argc, const char *argv[])
{

    int a = 20;
	int *p = &a;
	int **q = &p;

	printf("int * size = %ld\n",sizeof(int *));
	printf("int ** size = %ld\n",sizeof(int **));


	printf("**q = %d\n",**q);
	printf("*p = %d\n",*p);
	printf("a = %d\n",a);


	printf("*q = %p\n",*q);
	printf("p = %p\n",p);
	printf("&a = %p\n",&a);

	printf("q = %p\n",q);
	printf("&p = %p\n",&p);


	return 0;
}
  • 运行结果:
int * size = 8
int ** size = 8
**q = 20
*p = 20
a = 20
*q = 0x7ffdbce87bd4
p = 0x7ffdbce87bd4
&a = 0x7ffdbce87bd4
q = 0x7ffdbce87bd8
&p = 0x7ffdbce87bd8

你可能感兴趣的:(c语言,学习,开发语言)