注:int
占用4个四个B。
重点:数组名a
,a+1
表示a
的存储单元的地址+1。
二维数组的存储单元是一维数组;
三维数组的存储单元是二维数组。
- 内存四区:
- 代码区
- 全局区
- 堆区
- 栈区
- 首地址:
- 一段内存空间中第一个存储单元的地址。
- 指针
- 野指针
int *p; //这个时候是野指针,因为不知道变量p所指向的地址,危险!。
int *p = NULL; //避免野指针
- 空指针
void* //不知道指向的类型时,可以用空指针代替。等明确了之后再进行类型转换,常用于动态内存分配:malloc new
- 一维数组和指针
- 指针运算:
只含有:+ - ++ --四种运算。
以指针所指向的类型空间单位进行偏移。
例子:
1、
int a[5] = {1, 2, 3, 4, 5};
cout << a <<endl; // 输出第一个存储单元的地址,即a[0];
cout << &a <<endl; // 同样输出a[0]的地址;
a+1; //地址增加4个字节;
&a+1; //地址增加20个字节;
2、
- 二维数组与指针
int a[3][4];
数组名a
指向二维数组的第一个存储单元(是一个一维数组,说白了,二维数组就是多个一维数组),即a[0]的 地址:
在这里,a+1
加十六个 字节;
附:a[0]
是一维数组的数组名,a[0]+1
地址加4个字节。
例子:
注:二维数组要取值要用两次*
。 - 进阶:字符串和字符数组
区别:字符串多一个\0
,若字符数组多一个\0
,则字符数组变成字符串。