何以为皇 发表于 2019-3-22 20:19:08

指针与数组的问题

int **p;
int (*p);
int p[];
这三者的具体区别和表示含义分别是什么啊?越具体越好,谢谢各位鱼油。
{:5_92:}

Croper 发表于 2019-3-22 20:29:24

本帖最后由 Croper 于 2019-3-22 20:36 编辑

int **p;//声明并定义一个指向整数的二级指针,或者说是一个指向(指向整数的指针)的指针。
                      //仅仅是一个指针,并且必须指向一个(指向整数的指针)或置空,除了指针占用的空间外,没有开辟额外的空间

int (*p);      //声明并定义一个指向(大小为N的整数数组)的指针
                      //仅仅是一个指针,并且必须指向一个(大小为N的整数数组)或置空,除了指针占用的空间外,没有开辟额外的空间

int p[];      //声明并定义一个(大小为N的整数数组)的数组
                      //是一个数组,并且必须在定义时给出具体的值(这样才能推断空[]的大小),占用的空间为:sizeof(int)*N*数组大小

何以为皇 发表于 2019-3-22 20:54:23

Croper 发表于 2019-3-22 20:29


算是有了更深入的认识了,多谢

jackz007 发表于 2019-3-22 21:15:02

本帖最后由 jackz007 于 2019-3-22 21:16 编辑

int ** p    ; // 定义 p 为指向整型指针的指针,* p 内可以保存一个指向整型数的指针,** p 内可以保存一个整数;
int p[]; // 定义 p 为末维为 N 的二维数组,可以通过 p 访问和使用数组元素;
int (* p)[] ; // 定义 p 为指向一维数组的指针,使用方法稍微复杂一些,请看下面的实例:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(void)
{
    int a[] = {{1 , 2 , 3 , 4} , {5 , 6 , 7 , 8} , {9 , 10 , 11 , 12}} ;
    int (* p) = a                                                      ; // 一维数组指针指向二维数组 a,注意,一维数组元素个数与被指向二维数组的末维一致
    printf("%d , %d , %d\n" , p , p , p)                ; // 可以像使用 a 那样使用 p
    printf("\n")                                                          ;
}
页: [1]
查看完整版本: 指针与数组的问题