一.内存
在了解指针之前我们首先需要去了解计算机中内存到底是如何存储数据的。包括内存如何进行编号以及一个内存单元有多大的空间
如下,我们以32位计算机为例来说明内存的存储形式。
1. 32位计算机就代表该计算机有32根地址线,该地址线是一种物理线。在通电后,每根物理线就会发出两种电信号,将该电信号转化为数字信号,即0和1。通过这种转化就很容易的获得2的32次方个二进制排序,从而让每一个二进制排序代表一个内存单元来存放信号。
排序如下:每一个方格代表一个内存存储单元(左侧),编号(右侧)
00000000000000000000000000000000 | 0x00000000 |
00000000000000000000000000000001 | ... |
00000000000000000000000000000010 | ... |
... | ... |
10000000000000000000000000000000 | ... |
... | ... |
1111111111111111111111111111111111111 | 0xffffffff |
这样,我们就可以了解内存单元是如何编号的了。
2. 一个内存单元的大小是一个字节(Byte),计算机中的转化单位如下
1byte=8bit 1kb=1024Byte 1MB=1024Kb 1GB=1024MB 1TB=1024MB
二.指针
如下代码:
int main()
{
int a = 10;
int *pa = &a; //在指针变量pa中存放了i的地址
return 0;
}
其中pa就是自定义的指针变量名,* 是指针标识符,前面的int是指指针的内型,&a是指访问变量a的在内存中的地址。
综上所述,指针的本质就是内存的地址,指针变量就是专门存储地址的变量。
三.结构体
对于结构体,我们可以简单的理解为就是能自己创建一个新的类型
如下代码
#include <stdio.h>
struct stu //定义一个类型,类型名叫stu,其中包含char,int,double三个类型的变量
{
char name[];
int age;
double score;
}; //注意此处的分号
int main()
{
struct stu s={"某某“,20,85.5}; //对结构体变量进行初始化的赋值
printf("%s %d %lf\n",s.name,s.age,s.score);
return 0;
}