注意: C语言中不允许将数组直接作为一个单元赋予另一个数组
首先有个疏忽的小知识:指针类型是一个新类型,其变量是含有地址的指针。指针的加减不能简单地理解为是地址的变化,而应该理解为指针这一变量的产生了变化,从而才导致所指地址的变化。
在数组中的指针运算中: int* p / p + 1; 指针的变化就是的指针这一变化 int* p; p = p + 1;。 而此时地址的变化是由于指针改变而产生的地址改变,其改变的值取决于指针所指向的数据类型:例如,指针p指向int* 类型,那么指针p+1 中存放的地址就是p地址加上sizeof(int) 个字节后的地址(这是为什么必须声明指针所指向类型的原因)
此时再次理解int arr[5] = {1,2,3,4,5}中大概发生了些什么有关指针的事:
创建了5个指针变量arr/arr+1/arr+2/arr+3/arr+4根据指针指向的数据类型int,在这五个指针变量中分别放入字节相邻为sizeof(int) 的地址,例如 0x7fff64eb2920、0x7fff64eb2924…在这些地址中放入初始化的数= = = = = = = = = = = = = = = = = = = = = = = = =》 &arr[2] = arr + 2