一、RAM与变量所占字节
🍉 要理解指针,首先要理解不同的数据类型或者不同的变量在计算机的内存中是如何存储的?
计算机的内存(RAM 随机存储器)段或区,在内存中都代表一个字节,作为一个典型的内存系统,每个字节都有一个地址。
🍇 不同变量类型所占用的字节
- char:1Byte(8位)。
- short:2Byte(16位)。
- int:4Byte(32位)。
- long:4Byte(32位)或8Byte(64位)。
- float:4Byte(32位)。
- double:8Byte(64位)。
- long double:8个Byte(64位)或12Byte(96位)。
二、什么是指针?在内存中是怎么样的?
- 系统内部会有一张表,通过查表就可以知道不同变量所占用的内存大小
- Pointes : Varibles that store address of other variable
- 指针实质上是存储的地址,可以通过操作指针来操作地址里面的内容。
- 通过 *p 可以进行解引用,
三、指针
#include<stdio.h>
int main()
{int a=88,b=66;int *p = &a;//int *p;//p = &a;char c='1';char *d=&c;printf("p = %lu\n",p);printf("p+1 = %lu\n",p+1);printf("&a = %lu\n",&a);printf("*p = %lu\n",*p);printf("d = %lu\n",d);printf("d+1 = %lu\n",d+1);printf("char字节数=%lu\n",sizeof(char));printf("int字节数=%lu\n",sizeof(int));printf("float字节数=%lu\n",sizeof(float));printf("long字节数=%lu\n",sizeof(long));printf("char* 字节数=%lu\n",sizeof(char *));printf("int* 字节数=%lu\n",sizeof(int *));printf("long* 字节数=%lu\n",sizeof(long *));return 0;
}
输出
p = 140737488347616
p+1 = 140737488347620
&a = 140737488347616
*p = 88
d = 140737488347615
d+1 = 140737488347616
char字节数=1
int字节数=4
float字节数=4
long字节数=8
char* 字节数=8
int* 字节数=8
long* 字节数=8
🍇 🍓 🍈 🍒 🍑 🥭 🍍 🥥 🥝 🍅 🍆 🥑 🥦指针的偏移量根据什么确定?
可以看出指针的大小=8byte,但是偏移量不是根据8byte进行偏移的,那根据什么来的呢?
- p + 1 和 p 之间的差距是 4 字节,因为 p 是一个 int * 指针,而 int 类型的大小是4字节。
- d + 1 和 d 之间的差距是 1 字节,因为 d 是一个 char * 指针,而 int 类型的大小是1字节
参考链接
【强烈推荐】4小时彻底掌握C指针 - 顶尖程序员图文讲解 - UP主翻译校对 (已完结)_哔哩哔哩_bilibili