数组指针与指针数组:
int *a[10] | 数组,int*类型的数组,即包含10个int类型指针的数组 |
int (*a)[10] | 指针,指向数组的指针,即指向包含10个元素的数组的指针 |
记忆方法:从右往左读,变量类型先靠近的数组标记 [ ] ,则说明是数组;如果有括号,那么就认先认括号里的内容。
指向常量的指针 与 指向固定位置的指针(常指针):
const int *p | 指向常量的指针 |
int const *p | 同上 |
int *const p | 常指针,只能指向固定位置 |
记忆方法:按照指针的阅读方法,从右往左读,找到 *,* 左边的是当前变量通过 * 运算符计算后的值。
比如 const int *p 的 * 左边为 const int,那么这个指针就是指向 const int类型的指针,即指向常量的指针;
而 int *const p 的 * 左边为 int,那么这个指针指向的是 int 类型,所以这是一个指向 int 变量的指针, const便可以认为是用来修饰指针的,那么就是常指针,即指正指向固定位置。
字节序的 大端 和 小端:
首先明确一点:字节序的大小端仅仅影响超过一个字节的数据,如果是单字节,那么大小端都一样。
网络字节序 | 大端 |
x86架构数据在内存中存储 | 小端 |
ARM架构数据在内存中存储 | 小端 |
假设有数据 0x 12 43 56 87,此16进制数据 由 4个字节组成,那么它的在大端模式和小端模式的内存布局如下:
地址(降序) | 大端 | 小端 |
(高地址) 0x30000000 | ... | ... |
0x2FFFFFFE | 0x87 | 0x12 |
0x2FFFFFFD | 0x56 | 0x43 |
0x2FFFFFFC | 0x43 | 0x56 |
0x2FFFFFFB | 0x12 | 0x87 |
(低地址) 0x2FFFFFFA | ... | ... |
总结:小端存储,低地址存放最右侧数据。大端存储,高地址存储最右侧数据。