学习笔记
《深入理解C指针》
http://www.ituring.com.cn/book/1147
第4章 指针与数组
1、指针概述
一维数组、二维数组
二维数组
如果只用一个下标访问二维数组,得到的是对应行的指针
数组很特殊,&matrix[i]和matrix[i]都是取出指针里面存的内容
访问数组
2、指针表示法与数组
指针表示法与数组
数组和指针的差别
(1)vector[i] 与 *(vector+i) 生成机器码不同
- 假设这里,我想取出vector[2] = 3
- 反汇编
mov DWORD PTR [rbp-32], 1
mov DWORD PTR [rbp-28], 2
mov DWORD PTR [rbp-24], 3
mov DWORD PTR [rbp-20], 4
mov DWORD PTR [rbp-16], 5
-
vector[i],从vector处开始,移动i个位置,取出内容
mov edx, DWORD PTR [rbp-24]
-
*(vector+i),从vector地址开始,给这个地址加上i,从新地址里取出内容
lea rax, [rbp-32]
add rax, 8
(2)sizeof(pv)与 sizeof(vector)
Visual studio 2019
GNU GCC v7.1.1)
-
sizeof(vector)是数组的字节数 -
sizeof(pv)是指针的长度,机器不同,编译器不同,指针长度可能不同
(3) 数组名vector 不是左值,不可被修改
3、用malloc创建一维数组
用malloc创建一维数组
- 分配一块内存并把它当成数组,其长度在运行时确定










网友评论