美文网首页
指针数组 数组指针

指针数组 数组指针

作者: hehehehe | 来源:发表于2023-03-29 14:34 被阅读0次

    总结:主要看后面的两个字是什么(前面是修饰作用),因此指针数组是数组,而数组指针是指针。

    指针数组

    指针数组:是指一个数组里面装着指针,也即指针数组是一个数组;
    定义形式:int *a[10];
    说明[]优先级高于*,该定义形式应该理解为:int * (a[10]);括号里面说明a是一个数组,包含了10个元素,括号外面说明每个元素的类型为int *。

    #include <stdio.h>
    int main(){
        int a = 16, b = 932, c = 100;
        //定义一个指针数组
        int *arr[3] = {&a, &b, &c};//也可以不指定长度,直接写作 int *arr[]
        //parr 是指向数组 arr 的指针,确切地说是指向 arr 第 0 个元素的指针,
        //它的定义形式应该理解为int *(*parr),括号中的*表示 parr 是一个指针,括号外面的int *表示 parr 指向的数据的类型。
        //arr 第 0 个元素的类型为 int *,所以在定义 parr 时要加两个 *。
        int **parr = arr;
        printf("%d, %d, %d\n", *arr[0], *arr[1], *arr[2]);//16, 932, 100
        printf("%d, %d, %d\n", **(parr+0), **(parr+1), **(parr+2));//16, 932, 100
     
        return 0;
    }
    

    数组指针

    数组指针:是指一个指向数组的指针,它其实还是一个指针,只不过是指向数组而已;
    定义形式:int (*p)[10];
    该指针变量保存的是一个数组的首地址,它指向一整个数组(),数组的类型为int[10]

    int main(void)
    {
        char a[5]={'A','K','C','G','L'};    
        char (*p)[5]=&a;//&a代表的是整个数组的首地址
        //char (*p)[5]=a;这样是错误的,因为a代表第一个元素的首地址
        printf("%c %c %c",**p,*(*p+1),*(*p+3));//输出:A K G
        return 0;
    }
    

    说明:a代表的是第一个元素的地址,即:&a[0],而&a代表的是整个数组的地址。a+1代表的是下一个元素的地址,即&a[1],而&a+1代表的是向后移动5个字节的地址。这里为什么用的二级指针呢?因为p=&a,p即为第一个元素的地址,再p即输出了第一个元素。同理,(p+1),(*p+3)输出第二个元素,第四个元素。

    二维数组

    a 数组包含3行,即3个行元素:a[0]、a[1]、a[2]。

    image.png
    #include <iostream>
    #include <string>
    #include <cstdio>//声明sprintf
    
    using namespace std;
    
    void InitPointer(int **ptr, int length, int default_value) {
      *ptr = (int*)malloc(sizeof(int) * length);
      cout<< *ptr<<endl;
      for (int i = 0; i < length; ++i) {
        (*ptr)[i] = default_value;
      }
    }
    
    int main()
    {
        int * ptr =nullptr;
        cout<<ptr<<endl;
        InitPointer(&ptr,2,2);
        for (int i = 0; i < 8; i++)
        {
            cout<<ptr[i]<<endl;
        }
        cout<<ptr<<endl;
        cout<<(ptr == nullptr) <<endl; 
        free(ptr);
    }
    
    

    相关文章

      网友评论

          本文标题:指针数组 数组指针

          本文链接:https://www.haomeiwen.com/subject/bbyfddtx.html