目录
1.指针的定义
2.图示
3.程序示例
4.总结
1. 指针的定义
①. 内存(在程序中称为主存DRAM)是计算机中最重要的部件之一,它是外存(硬盘)与CPU进行沟通的桥梁。
②. 计算机所有程序的运行都是在内存中进行,为了有效的使用内存,就把内存以八位二进制(bit)划分为存储单元(也就是1字节)。为了有效的访问到内存的每个存储单元,就给内存的每个存储单元,就给内存存储单元进行了编号,这些编号被称为该内存存储单元地址。
③. 存储地址的变量称为指针变量。在C语言中指针就是地址。指针变量的值就是某份数据的地址,这样的一份数据可以是数组、字符串、函数,也可以是另外的一个普通变量或指针变量。
2. 图示
主存示意图:
3. 程序示例
3.1 取地址
3.1.1 源程序
/** 指针 */
#include<stdio.h>
int main()
{
int a = 10;
int* p = &a; //指针类型 取地址 将a的地址赋值给p 变量都有地址
printf("1==>0x%08x \n", p); // 0x:十六进制 %08x:八位十六进制 小写
printf("*p = %d\n", *p); //*p = *&a <==> *p = a
printf("2==>0X%08X \n", p); //0x:十六进制 %08x:八位十六进制 大写
printf("3==>%p \n", p); //%p:八位十六进制 大写
return 0;
}
3.1.2 运行结果
3.1.3 图例
3.2 指针的大小
3.2.1 源程序
#include<stdio.h>
/** 指针的大小 */
int main()
{
printf("char * size: %d\n", sizeof(char*)); //char类型指针大小
printf("int * size: %d\n", sizeof(int*)); //int类型指针大小
printf("short * size: %d\n", sizeof(short*)); //short类型指针大小
printf("double * size: %d\n", sizeof(double*)); //double类型指针大小
return 0;
}
3.2.2 运行结果
3.2.2.1 VS2019 x86中
3.2.2.2 VS2019 x64中
4. 总结
4.1 p = &a ; * p = *&a <==> *p = a; 即将a的地址赋值给指针类型变量p,而 * p就是a本身。
4.2 * 是一个特殊符号,表明该变量是指针变量,定义指针类型变量时必须带 * , 给指针类型变量赋值时不用带 * 。
4.3 使用指针是间接获取数据,而使用变量名是直接获取数据。
4.4 指针类型大小在VS2019中根据平台不同而不同,x86是4字节(bit),而x64则为8字节(bit)。
4.5 int * p = &a; 将a的地址赋值给指针类型p,而不是将a的地址赋值给 * p 。 * 表示该变量类型是指针类型或声明了一个指针类型的变量。