数组指针与指针数组区别

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

示例:

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时输出不加*

猜你喜欢

转载自blog.csdn.net/yooppa/article/details/112980820
今日推荐