《C Prime Plus》读书笔记(10):数组和数组指针

    科技2024-06-20  73

    文章目录

    数组的初始化数组指针数组指针与数组下标的关系

    数组的初始化

    当数组为静态变量时(块作用域、外部链接、内部链接的静态变量),数组默认初始化为0当数组为自动变量时,数组的初始化方式: 已知数组大小完全初始化和部分初始化自动匹配数组大小初始化 #include<stdio.h> int arr1[5]; // 默认初始化 static int arr2[5]; // 默认初始化 int main(){ static int arr3[5] // 默认初始化 /*不可默认初始化, 需要显示初始化*/ int arr4[5] = {1,2,4,5,7}; // 完全初始化 int arr5[5] = {1,2,4}; // 部分初始化,未初始化的位置将默认初始化为0 int arr6[] = {1,2,3,4,5,6,7,8,9}; // 自动匹配大小初始化 return 0; }

    注意: 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

    Processed: 0.014, SQL: 8