(*p)[3]与*p[3]的区别

(*p)[3]与*p[3]的区别

int p[3] p是一个数组,此数组有3个元素,每个元素都是int类型,也就是指向整型数据的指针类型。

int a=10,b=20,c=30;
int*p[3]={&a,&b,&c};

而int(*p)[3]中的p是一个指向数组的指针,此数组有3个int类型的元素。例如:

int a[3]={1,2,3}; 那么p就是指向这个数组a的指针。
int(*p)[3]=&a; // 这里赋值一定要用取地址符号。也就是取数组a的地址。

不可以这样赋值: int(p)[3]=a; // error :类型不兼容。a本来是数组类型,是不可以赋值给int()[3]这个类型的。

但是这样是可以的int p1=a; // ok 因为a可以隐式转换为int类型,其值实际上就是数组第一个元素的地址,也就是&a[0]

#include "stdio.h"
#include "stdlib.h"

void main(){
    int a[3] = {1,2,3};
    int* n[3] = {a,a,a};  //指针数组,存储的是int 类型的指针
    int (*p)[3] = &a;  //数组指针。p是存储指向一个数组的指针
    printf("%d",*(*(p)+1));  //输出为2
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值