指针数组和数组指针概念详解

一、指针数组vs数组指针

下面是符号认识

指针数组符号示例:int *p1[5]

数组指针符号示例:int(*p)[4]

下面分别对这两个概念讲解:

1.指针数组:

1.1符号优先级了解:*结合的优先级低于[]的优先级;

[]与()是同一优先级的;

所以p1先跟[5]个元素先结合成5个地址在跟*结合,形成所谓的指针数组;每一个元素都是整形指针,指向整形变量。

1.2使用场合剖析:利用指针数组指向每个元素的地址,而每个元素的变量名就是元素本身;

示例指针数组的元素是字符串(每个元素都是地址),取出各个元素只需要用变量名访问即可(如printf(“%d”,p1[1]))。

1.3示例代码:

#include

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};/*我们知指针就是地址由此可见这是一个由5个指向整型数指针(地址)组成的数组;*/

for(int i=0;i<5;i++){

printf("%d ",*p1[i]);

}

putchar('\n');



printf("=======================\n");



char *p3[5]={

"111111",

"222222",

"333333",

"444444",

"555555"};

for(int i = 0;i<5;i++){

printf("%s\n",p3[i] );//p3[i]是地址

}

return 0;

}

2.数组指针:

2.1符号优先级了解:()与[]的优先级别是一样的,但是结合顺序是从左到右,所以p2先被定义为一个指针变量,指向后面紧跟着5个元素的数组;

2.2使用场合剖析见以下参考代码

2.3参考代码

#include

int main()

{

int temp[5]={1,2,3,4,5};

int(*p)[5]=&temp;/*数组实际是一组由多个地址并排的地址组合,数组指针实际是指向数组头的指针,用在二维数组里面也是一样的,看起来有点不一样而已,换方不换药;*/

/*数组指针指的是数组,而数组名又可以当成是第一个元素来用;在数组名前面加一个取地址符号(不加也可,加上便于理解)*/

/*指针就是地址,这个指针取的是数组的地址,但二维数组中可以不用加;数组名在二维数组里面表示的

是数组,数组名又代表是地址*/

for(int i =0;i<5;i++){

printf("%d ",*(*p+i));

}

putchar('\n');



int temp1[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};

int (*p2)[4];

p2=temp1;

int i,j;

for(i=0;i<3;i++){

for(j=0;j<4;j++){

printf("%d  ",*(*(p2+i)+j));

}
}

return 0;

}



附件:(了解一下即可)

优先级

运算符

含义

使用形式

结合性

说明

1

[ ]

数组下标

数组名[整型表达式]

左到右

( )

圆括号

(表达式)

.

成员选择(对象)

对象.成员名

->

成员选择(指针)

对象指针->成员名

++

自增运算符

变量名++

单目运算符

--

自减运算符

变量名--

单目运算符

2

-

负号运算符

-表达式

右到左

单目运算符

(类型)

强制类型转换

(数据类型)表达式

单目运算符

++

自增运算符

++变量名

单目运算符

--

自减运算符

--变量名

单目运算符

*

取值运算符

*指针表达式

单目运算符

&

取地址运算符

&左值表达式

单目运算符

!

逻辑非运算符

!表达式

单目运算符

~

按位取反运算符

~表达式

单目运算符

sizeof

长度运算符

sizeof 表达式

sizeof(类型)

单目运算符

3

/

表达式 / 表达式

左到右

双目运算符

*

表达式 * 表达式

双目运算符

%

余数(取模)

整型表达式 % 整型表达式

双目运算符

4

+

表达式 + 表达式

左到右

双目运算符

-

表达式 - 表达式

双目运算符

5

<<

左移

表达式 << 表达式

左到右

双目运算符

>>

右移

表达式 >> 表达式

双目运算符

6

>

大于

表达式 > 表达式

左到右

双目运算符

>=

大于等于

表达式 >= 表达式

双目运算符

<

小于

表达式 < 表达式

双目运算符

<=

小于等于

表达式 <= 表达式

双目运算符

7

==

等于

表达式 == 表达式

左到右

双目运算符

!=

不等于

表达式 != 表达式

双目运算符

8

&

按位与

整型表达式 & 整型表达式

左到右

双目运算符

9

^

按位异或

整型表达式 ^ 整型表达式

左到右

双目运算符

10

|

按位或

整型表达式 | 整型表达式

左到右

双目运算符

11

&&

逻辑与

表达式 && 表达式

左到右

双目运算符

12

||

逻辑或

表达式 || 表达式

左到右

双目运算符

13

?:

条件运算符

表达式1? 表达式2: 表达式3

右到左

三目运算符

14

=

赋值运算符

变量 = 表达式

右到左

双目运算符

/=

除后赋值

变量 /= 表达式

双目运算符

*=

乘后赋值

变量 *= 表达式

双目运算符

%=

取模后赋值

变量 %= 表达式

双目运算符

+=

加后赋值

变量 += 表达式

双目运算符

-=

减后赋值

变量 -= 表达式

双目运算符

<<=

左移后赋值

变量 <<= 表达式

双目运算符

>>=

右移后赋值

变量 >>= 表达式

双目运算符

&=

按位与后赋值

变量 &= 表达式

双目运算符

^=

按位异或后赋值

变量 ^= 表达式

双目运算符

|=

按位或后赋值

变量 |= 表达式

双目运算符

15

,

逗号运算符

表达式1,表达式2,表达式3,…

左到右

转自B站小甲鱼总结:运算符的优先级和结合性,《带你学C带你飞》【第一季】,C\C++交流,鱼C论坛 - Powered by Discuz!

你可能感兴趣的:(C语言,数据结构,蓝桥杯,c语言,开发语言)