指针作为c语言的一个难点,通常很让人头疼,原因就在于对指针的基本概念和原理掌握的不牢固,今天在这里就简单的了解一下什么是指针。
目录
指针的优点和作用在于它可以直接操作内存所以要想了解指针的话我们首先要知道什么是内存。
内存
内存是电脑上特别重要的存储器,计算机中程序的运行都是在内存中进行的 。
所以为了有效的使用内存,就把内存划分成一个个小的内存单元,每个内存单元的大小是1个字节。
为了能够有效的访问到内存的每个单元,就给内存单元进行了编号,这些编号被称为该内存单元的地址。
通过取地址调试我们找到了a的地址(可以看到是16进制的数字)。我们只要知道首地址就可以找到之后的地址了,所以知道首地址就够了。
接着我们把地址赋给一个变量pa。
int a = 10;//四个字节
int* pa = &a;//pa是创建出来存放地址(指针)的,也叫做指针变量
int*整体是类型,整型指针类型
*说明pa是指针变量
int说明pa指向的对象是int整型
所谓的指针就是地址也就是那串16进制的编号。但一般我们口上常说的指针就是指指针变量也就是上述代码中的pa。
下面我们就来讲解一下这个pa,也就是指针变量。
指针变量
类型
上面我们已经说了指针变量的类型取决于指针变量所指向对象的类型。
int a = 10;//四个字节
int* pa = &a;//pa是创建出来存放地址(指针)的,也叫做指针变量
char b = 'q';
char* pb = &b;
float c = 3.6f;
float* pc = &c;
大小
那么指针用来存储地址它的大小又是多少呢?
接着我们就用一段代码来测试一下
int main()
{
printf("%d\n", sizeof(char *));
printf("%d\n", sizeof(short *));
printf("%d\n", sizeof(int *));
printf("%d\n", sizeof(double *));
return 0;
}
可以看到结果都是4,这是什么原因呢?
因为在32位平台下即32比特位32个0/1可能,又因为每个字节占8个比特位所以每个指针变量的大小就是4字节,当换成64位平台下就是8字节。
如图: