导航号,我的单页导航
文章目录

前言

简单记录一下指针数组数组指针之间的区别。

正文

由于很容易搞混,因此这里做一下记录。

指针数组

指针数组是指具有若干个相同存储类型和数据类型的[指针变量]构成的组合。

指针数组的一般形式:

存储类型  数据类型 * 指针数组名 [大小]
//指针数组,类型是int * 所以叫int型指针数组
int * p[n];

// int型数组
int array[n]

[]的优先级比*高,所以p先是一个数组,在int * 组合说明是一个整型指针数组,含有n个指针类型的数组。

数组中存储的就是指针

指针数组:首先它是一个数组,数组的元素都是指针,数组占多少个字节由数组本身的大小决定,每一个元素都是一个指针,在32 位系统下任何类型的指针永远是占4 个字节。它是“储存指针的数组”的简称。

#include<stdio.h>

int main(){
    int a[2][2]= {{1,2},{3, 4}};

    for( int i=0; i< 2; i++){
            for( int j=0; j< 2; j++){
            printf("%d \n ", a[i][j]);
            }
    }

    printf("\n");

    int * q[2];

    q[0] = a[0];
    q[1] = a[1]; //不指定q[1]就没法查询到a[1]的内容


    for( int i=0; i< 2; i++){
            for( int j=0; j< 2; j++){
                    printf("%d \n ", q[i][j]);
            }
    }
    return 0;
}

输出结果:

 1
 2
 3
 4

 1
 2
 3
 4

数组指针

行指针,也就数组指针。存储行地址的指针叫行指针变量。

一般的形式如下:

存储类型  数据类型 (* 行指针变量)[大小]

比如:

int (*p)[n];

()的优先级比[]高,说明p是一个指针,指向一个整型的一为数组,这个一维数组大小为n。

数组指针:首先它是一个指针,它指向一个数组。在32 位系统下任何类型的指针永远是占4 个字节,至于它指向的数组占多少字节,不知道,具体要看数组大小。它是“指向数组的指针”的简称。

个人觉得,数组指针,可以看成存在类型为int的二维数组

#include<stdio.h>

int main(){
    int a[2][2]= {{1,2},{3, 4}};

    for( int i=0; i< 2; i++){
            for( int j=0; j< 2; j++){
            printf("%d \n ", a[i][j]);
            }
    }

    printf("\n");
    int (*p)[2]; //类型为int的数组指针
    p =a ;
    for( int i=0; i< 2; i++){
            for( int j=0; j< 2; j++){
                printf("%d \n ", p[i][j]);
            }
    }

    return 0;
}

输出的结果:

 1
 2
 3
 4

 1
 2
 3
 4

小结:

  1. 数组指针和指针数组赋值存在一定的区别。

指针数组:

int * q[2]; // 存储的类型为int *指针

q[0] = a[0];
q[1] = a[1]; //不指定q[1]就没法查询到a[1]的内容

数组指针:

int (*p)[2]; //类型为int的数组指针
p =a ;
  1. ()的优先级比[]高,[]比*高,所以导致存储的类型不一样。

PS 以上面例子

指针数组:存放的是int *
数组指针:存放的是int

谁的优先级高就读法就放在后面,比如指针数组中[]的优先级高于*;比如数组指针中的(int *)高于[]。

  1. 如果指针在最后,说明这个是指针,用于指向某个地址的;
  2. 如果数组在最后,说明这个是数组,用于存储指针的数组,数组类型为int *;

参考文章

  1. 数组指针和指针数组的区别

© 版权声明
导航号,我的单页导航

1 条评论

  • 改变自己
    改变自己 管理员

    (1)如果指针在最后,比如数组指针,说明这个是指针,用于指向某个地址的;(2)如果数组在后,说明这个是数组,用于存储指针的,也就是数组类型为int *

    回复