c语言学习_part01_c_primer_plus_chapter010_数组与指针

1. 数组

  • 初始化数组:

    int a[3] = {1,2,3};

 

  • const修饰数组,不能修改数组中的值

    const int a[3] = {1,2,3};

 

2. 多维数组

float rain[5][12]

包含5个数组元素,每个数组元素包含12个float类型的元素

 

3. 指针和数组

  • 如果a是个数组,则以下语句成立:

a == &a[0]

a和&a[0]都表示数组首元素的内存地址,都是常量,在程序运行过程中都不会改变

 

  • 指针+1表示的是增加一个存储单元,在数组中就是去下一个元素的地址,而不是下一个字节的地址

 

4. 指针操作

  • 赋值:将地址赋值给指针,int* a = &...

  • 解引用:*运算符求出指针指向地址上存储的值

  • 取址:指针也有自己的地址,&运算符给出指针本身的地址

  • 指针加或者减去整数:指针移位,数组元素移位

  • 递增或者递减指针:指针移动一位,如果是数组,则指向数组中的下一个或前一个元素

  • 指针求差:可以计算出两个元素之间的位置差,指针-指针=整数,指针-整数=指针

 

5. 保护数组中的数据

  • 编写处理基本数据类型的函数时候,一般传递值,如果要对数值进行改变,则传递指针

  • 处理数组时,必须传递指针,因为效率高,如果要值传递,需要对数组进行复制,浪费空间

  • 因此用const修饰数组,告诉编译器不能修改数组内容

    int sum(const int ar[], int n){  /*不可以修改ar中的值*/
       int i;
      int total = 0;  
       
       for(i = 0; i < n; i++){
           total += ar[i];
      }
       
       return total;
    }
  • const作用:const修饰的变量是只读的,不能修改

    • 修饰数组:数组中的元素不可以被修改

      const int days[3] = {1, 2, 3}   /*days中元素不能被修改*/
    • 指向const的指针:用指针法表示数组,数组中元素一样不能改变

      int days[3] = {1, 2, 3};
      const int* pd = days;  /*pd指向数组的首元素*/

      *pd = 10;   /*不允许*/
      days[0] = 10;  /*允许,因为days没有被const修饰*/
      pd++;    /*允许,pd可以指向别的地方*/
    • 修饰指针:指针不能指向别的地方

      int days[3] = {1, 2, 3};
      int* const pd = days;

      *pd = 10;   /*允许*/
      days[0] = 10;  /*允许,因为days没有被const修饰*/
      pd++;    /*不允许,pd不可以指向别的地方*/
    • 用两次const:指针既不能指向别的地方,也不能修改指向地址的值

      int days[3] = {1, 2, 3};
      const int* const pd = days;

      *pd = 10;   /*不允许*/
      days[0] = 10;  /*允许,因为days没有被const修饰*/
      pd++;    /*不允许,pd不可以指向别的地方*/

6. 指针和多维数组

int a[5][2];

a;             /*二维数组的首元素地址,每个元素是包含两个int型元素的一维数组*/
a+1;           /*二维数组的第二个元素(一维数组)的地址*/
*(a+2);        /*二维数组的第三个元素(一维数组)的首元素地址*/
*(a+2)+1;      /*二维数组的第三个元素(一维数组)的第二个元素(int型值)地址*/
*(*(a+2)+1);   /*二维数组的第三个元素(一维数组)的第二个元素(int型值)的值,即数组中的第三行第二个元素值a[2][1]*/

 

  • 指针数组:包含指针的数组

    int* a[2];   /*a是包含两个指针元素的数组,指针元素指向int类型*/

     

  • 数组指针:指向数组的指针

    int (* a)[2];   /*a指向一个包含两个int类型数据的数组*/

     

7. 变长数组

  • 变长数组中的变不是说可以改变数组的大小。一旦创建了变长数组,大小会保持不变。这里的变是指:创建数组时,可以使用变量指定数组维度

int sum(int r, int c, int ar[r][c]){
   int row;
   int col;
   int tot = 0;
   for(row = 0; row < r; row++){
       for(col = 0; col < c; c++){
           tot += ar[row][col];
      }
  }
   return tot;
}
posted @ 2021-04-20 20:35  OLeeO97  阅读(30)  评论(0编辑  收藏  举报