学习笔记
《深入理解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)


-
sizeof(vector)
是数组的字节数 -
sizeof(pv)
是指针的长度,机器不同,编译器不同,指针长度可能不同
(3) 数组名vector 不是左值,不可被修改
3、用malloc创建一维数组

- 分配一块内存并把它当成数组,其长度在运行时确定
网友评论