内存会划分为一个个的内存单元,每个内存单元都有一个独立的编号
地址(编号也称为地址)
地址在c语言中也被称为指针
指针(地址)需要存储起来——存储到变量中,这个变量就被称为指针变量
指针(地址)的大小固定为4/8哥字节(32位平台/64位平台)
地址是物理的电线上产生
32位机器——32根电线——1/0
32个0/1组成的二进制序列,这个二进制序列位地址,32个bit位才能存储这个地址
也就是需要4个字节
所以指针变量的大小就是4个字节
同理64位上,大小为8个字节
如
char arr[]=''abcdef''
const char* p=''abcdef''//字符指针
const在*左边限制的是*p(即指向的字符串),在*右边限制的是p
此时p存储的是首字符的地址
指针数组
类比:
整形数组(存放整形)
字符数组(存放字符)
指针数组(存放指针)
int* arr1[10]——整形指针的数组
char* arr2[10]——一级字符指针的数组
char** arr3[10]——二级字符指针的数组
数组指针
类比:
整形指针——指向整型变量的指针,存放整形变量的地址的指针变量
字符指针——指向字符变量的指针,存放字符变量的地址的指针变量
数组指针——指向数组的指针,存放的是数组的地址的指针变量
(&数组名 是整个数组的地址)其余情况(除sizeof)数组名都为数组首元素地址
&arr类型为 int(*)[数组大小]