今天的笔记内容是关于指针的,指针换个说法就是地址,像日常生活中,我们买东西所填写的地址一样。C语言中的地址也是一样。C语言将内存划分为一个个内存单元,(一个内存单元的大小是1byte)且每个内存单元都有自己的编号。这些编号就是我们所说的地址,也就是指针。
eg:32位电脑,就有32根地址线,每根地址线能传输(0/1)所以能产生个地址,一个地址能管理一个内存单元,一个内存单元式一个字节。可以算出32位的电脑就是4G。(注意单位换算哦。1PB = 1024TB;1TB = 1024GB;1GB = 1024MB;1MB = 1024KB;1KB = 1024Byte;1Byte = 8bit )。
#include <stdio.h>
int main()
{
int a = 10;
//int说明p指向的对象是int类型的
//*说明p是指针变量
//&是取地址操作符号
int* p = &a;//这里p就是指针变量
printf("%p\n", p);//“%p”是以地址的形式打印数据,也就是打印地址
//*p是解引用操作符,意思是通过p存放的地址,找到p所指的对象
//*p就是p指向的对象 *p就是a
printf("%d\n",*p);
return 0;
}
我们可以通过编译器监视和内存看到,a的地址。可以看到取出来的地址是四个字节中最小的字节的地址。
注意:指针变量是p,不是*p。
问:不同类型的指针变量他的大小一样嘛?
不管什么类型的指针,都是在创建指针变量。指针变量是用来存放地址的,指针变量的大小取决于一个地址存放的时候需要多大的空间。
32位机器上的地址是4 Byte,64位机器上的地址是8 Byte。所以只要编译器位数确定,指针变量的大小是确定不变的。下面可以测试一下。
#include <stdio.h>
int main()
{
printf("%zu\n", sizeof(int*));
printf("%zu\n",sizeof(char*));
printf("%zu\n",sizeof(float*));
printf("%zu\n",sizeof(double*));
printf("%zu\n", sizeof(short*));
return 0;
}