多级指针与数组
多级指针
- 定义char **p(等于char *a[n]; [n]先开辟n个连续空间相当于一级地址,存的是不连续字符空间的地址,a标签常量是二级地址,存的是数组首地址)
- ⚪里面存的是二级指针,中间是一级指针
- p相当于数组名,数组名在c和c++中是地址
- p[n],p表示一个地址,[n]表示在某个地址下连续n个空间
- p[n]能一直往下直到p[n]=NULL
- 多级指针是为了将不同地址的数据连续起来
数组
-
定义一个数组int a[99]
-
数组名a是数组首元素的地址,与&a[0]相同,[99]定义连续99个int 空间,空间内存有int数据(一个int 4字节)
-
[ ]是索引操作符
-
相当于上图中间那列内存里面存int数据(是数据,不是地址),上图最右列内存没有
-
虽然只定义了99个int空间,但是可以越界
-
定义数组时赋值,赋值的是空间,只有第一次赋值时可以多个连续,以后只能逐一
int a[10]={10,20,30};//int a[10]=空间;{}里面的是空间,空间限制块
-
char buf[10]={‘a’,‘b’,‘c’};存了3字节
-
char buf[10]={“abc”};这个里面结尾自带\0,存4字节
-
“ ”和{ }都是空间限制块
char buf[10]={"abc"};//等于char buf[10]="abc";都是4字节
区别
-
a是常量符号不能放在 = 左边,p是变量
char buf[100]; buf ="hello world";//错误
-
数组空间的初始化与变量的初始化本质不同,空间的初始化往往需要库函数的辅助
-
char buf[10]="abc";//执行完有两个abc,一个是常量abc,一个是变量abc char *p="abc";//取常量abc地址