数组指针与指针数组区别

前提:
数组指针是指针
指针数组是数组

示例:

int *p1[5];

int (*p1)[5];

前者为指针数组 后者为数组指针。

涉及运算符号优先级:数组下标[]比取值运算符*的优先级更高。自右向左结合。先结合数组下标[].

先谈指针数组:

int *p1[5];

指向整型数据的指针变量。0 1 2 3 4 (int *)
**结论:**指针数组是一个数组,每一个数组元素存放一个指针变量。
代码示例:

#include <stdio.h>
int main()
{
int a=1;
int b=2;
int c=3;
int d=4;
int e=5;
int *p1[5]={&a,&b,&c,&d,&e};
int i;

for(i=0;i<5;i++)
{
printf("%d\n",*p[i]);
}
return 0;
}

这一段与数组的输出循环体大致相似。

for(i=0;i<5;i++)
{
printf("%d\n",*p[i]);
}

只是数组名换成指针变量而已。所以指针数组依然是数组。

指针数组运用到字符串上相当便捷(可以不用二维数组)

初始化(字符串打双引号)之后输出注意字符串输出给地址即可 不用打 * 这个取值符号直接写为p[i]

数组指针

int (*p1)[5];

指针变量p1指向整个数组,0 1 2 3 4(int),且数据类型为整型数据。

结论:数组指针是一个指针,它指向的是一个数组。

代码示例:

#include <stdio.h>
int main()
{
int temp[5]={1,2,3,4,5};
int (*p)[5]=&temp;
int i;

for(i=0;i<5;i++)
{
printf("%d\n",*(*p+i));
}
return 0;
}

切记不可这样初始化:
int (*p)[5]={1,2,3,4,5};
编译器不会报错但输出内容是错的。

数组指针也是如此,定义为char时输出不加*

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值