c语言指针和运算符优先级的问题,C语言指针和运算符优先级的问题

2020-12-11 21:08:06 字数 6691 阅读 9522

1楼:lost_觉悟

和()的优先级是1,而*的优先级是2,优先级小的先处理,所以不加括号的*p[4],就等价于*(p[4]),所以先看p[4]这一部分,就类似a[4]表明这是一个数组,那么*(p[4])就类似*(p),表明是一个指针,由于先是数组,那么*(p[4])就是一个以指针为元素的数组,同理 (*p)[4],先是指针,再是数组(注意1级运算符先左后右),那么就是一个指向数组的指针

2楼:匿名用户

[ ]优先级比*的高,不加()时是先运算p[ ],它是数组,然后运算*,才是指针,也就是 *(p[ ]),表示的是一个指向数组的指针;

而 ( *p ) [ ],先运算*,是指针,然后运算[ ],是数组,也就是由多个指针构成的指针数组。

3楼:唐道红

()的优先级 高啊。所以表示*p有四个整数类型的元素

c语言*(指针)的优先级是多少?

4楼:嵇景明林琬

!a++和!(a++)结果一样,a++是整句语句做完了才++,所以有没括号都一个样.

5楼:若寻影

*的优先级是2

++的优先级也是2

结合方向是从右到左,故先运算++,再运算*

c语言中算术运算符优先级的问题

6楼:匿名用户

1级优先级 左结合

() 圆括号

下标运算符

-> 指向结构体成员运算符

. 结构体成员运算符

2级优先级 右结合

! 逻辑非运算符

~ 按位取反运算符

++ 前缀增量运算符

-- 前缀增量运算符

+ 正号运算符

- 负号运算符

(类型) 类型转换运算符

* 指针运算符

& 地址与运算符

sizeof 长度运算符

3级优先级 左结合

* 乘法运算符

/ 除法运算符

% 取余运算符

4级优先级 左结合

+ 加法运算符

- 减法运算符

5级优先级 左结合

<< 左移运算符

>> 右移运算符

6级优先级 左结合

<、<=、>、>= 关系运算符

7级优先级 左结合

== 等于运算符

!= 不等于运算符

8级优先级 左结合

& 按位与运算符

9级优先级 左结合

^ 按位异或运算符

10级优先级 左结合

| 按位或运算符

11级优先级 左结合

&& 逻辑与运算符

12级优先级 左结合

|| 逻辑或运算符

13级优先级 右结合

? : 条件运算符

14级优先级 右结合

= += -= *= /= %= &= ^= |= <<= >>= 全为赋值运算符

15级优先级 左结合

, 逗号运算符

优先级从上到下依次递减,最上面具有最高的优先级,逗号操作符具有最低的优先级。

所有的优先级中,只有三个优先级是从右至左结合的,它们是单目运算符、条件运算符、赋值运算符。其它的都是从左至右结合。

具有最高优先级的其实并不算是真正的运算符,它们算是一类特殊的操作。()是与函数相关,与数组相关,而->及.是取结构成员。

其次是单目运算符,所有的单目运算符具有相同的优先级,因此在我认为的 真正的运算符中它们具有最高的优先级,又由于它们都是从右至左结合的,因此*p++与*(p++)等效是毫无疑问的。

另外在c语言里 没有前置后置之分 因为++ -- 是右结合所以 右侧优先运算 表现为 "后置优先级比较高" 的假象 前置和后置的区分是因为运算符重载而后加入c++的

接下来是算术运算符,*、/、%的优先级当然比+、-高了。

移位运算符紧随其后。

其次的关系运算符中,< <= > >=要比 == !=高一个级别,不大好理解。

所有的逻辑操作符都具有不同的优先级(单目运算符出外,!和~)

逻辑位操作符的"与"比"或"高,而"异或"则在它们之间。

跟在其后的&&比||高。

接下来的是条件运算符,赋值运算符及逗号运算符。

在c语言中,只有4个运算符规定了运算方向,它们是&&、| |、条件运算符及赋值运算符。

&&、| |都是先计算左边表达式的值,当左边表达式的值能确定整个表达式的值时,就不再计算右边表达式的值。如 a = 0 && b; &&运算符的左边位0,则右边表达式b就不再判断。

在条件运算符中。如a?b:c;先判断a的值,再根据a的值对b或c之中的一个进行求值。

赋值表达式则规定先对右边的表达式求值,因此使 a = b = c = 6;成为可能。

7楼:金鱼

1.运算符的优先级表

c 语言的符号众多,由这些符号又组合成了各种各样的运算符。既然是运算符就一定有其特定的优先级,下表就是c 语言运算符的优先级表:

2.注意事项:

8楼:庹熙系惜萍

++--是

优先级最高的

一般单目运算的

运算符比多目的优先级高。请采纳。

c语言指针及运算符优先级的问题

9楼:匿名用户

先执行vp++,由于++是在变量后面的,返回vp原来的值(没有执行++前的值),将0赋值给*vp

如果是*++vp=0,则将0赋值给已经加1的指针中地址

10楼:接接接接接

雁引愁心去,山衔好月来。

c语言中30多个运算符的优先级顺序

11楼:小夏在深圳

32多个运算符的优先级顺序如下

1、auto

声明自动变量

2、short

声明短整型变量或函数

3、int

声明整型变量或函数

4、long

声明长整型变量或函数

5、float

声明浮点型变量或函数

6、double

声明双精度变量或函数

7、char

声明字符型变量或函数

8、struct

声明结构体变量或函数

9、union

声明共用数据类型

10、enum

声明枚举类型

11、typedef

用以给数据类型取别名

12、const

声明只读变量

13、unsigned

声明无符号类型变量或函数

14、signed

声明有符号类型变量或函数

15、extern

声明变量是在其他文件正声明

16、register

声明寄存器变量

17、static

声明静态变量

18、volatile

说明变量在程序执行中可被隐含地改变

19、void

声明函数无返回值或无参数,声明无类型指针

20、if

条件语句

21、else

条件语句否定分支(与 if 连用)

22、switch

用于开关语句

23、case

开关语句分支

24、for

一种循环语句

25、do

循环语句的循环体

26、while

循环语句的循环条件

27、goto

无条件跳转语句

28、continue

结束当前循环,开始下一轮循环

29、break

跳出当前循环

30、default

开关语句中的“其他”分支

31、sizeof

计算数据类型长度

32、return

子程序返回语句(可以带参数,也可不带参数)循环条件扩展资料1、==和!=优先级相等,其他四个关系运算符的优先级相等,且前者的优先级低于后者。

如2==3>1 应该先计算3>1。

2、关系运算符中,若优先级相同,则“从左往右”结合。

如4>3<2,先计算4>3

3、关系运算符中的优先级小于算术运算符。

如3+4>8-2 相当于(3+4)> (8-2)

12楼:匿名用户

优先级高到低:

第一级:圆括号“()”、下标运算符“”、分量运算符的指向结构体成员运算符“->”、结构体成员运算符“.”

第二级:逻辑非运算符“!”、按位取反运算符“~”、自增自减运算符“++ --”、负号运算符“-”、类型转换运算符“(类型)”、指针运算符和取地址运算符“*和&”、长度运算符“sizeof”

第**:乘法运算符“*”、除法运算符“/”、取余运算符“%”

第四级:加法运算符“+”、减法运算符“-”

第五级:左移动运算符“<<”、右移动运算符“>>”

第六级:关系运算符“< > <= >= ”

第七级:等于运算符“==”、不等于运算符“!=”

第八级:按位与运算符“&”

第九级:按位异或运算符“^”

第十级:按位或运算符“|”

第十一级:逻辑与运算符“&&”

第十二级:逻辑或运算符“||”

第十**:条件运算符“?:”

第十四级:赋值运算符“= += -= *= /= %= >>= <<.= &= |= ^=”

第十五级:逗号运算符“,”

13楼:木比白

c语言运算符号

1级优先级 左结合

() 圆括号

下标运算符

-> 指向结构体

成员运算符

. 结构体成员运算符

2级优先级 右结合

! 逻辑非运算符

~ 按位取反运算符

++ 自增运算符

-- 自减运算符

- 负号运算符

(类型) 类型转换运算符

* 指针运算符

& 地址与运算符

sizeof 长度运算符

3级优先级 左结合

* 乘法运算符

/ 除法运算符

% 取余运算符

4级优先级 左结合

+ 加法运算符

- 减法运算符

5级优先级 左结合

<< 左移运算符

>> 右移运算符

6级优先级 左结合

<、<=、>、>= 关系运算符

7级优先级 左结合

== 等于运算符

!= 不等于运算符

8级优先级 左结合

& 按位与运算符

9级优先级 左结合

^ 按位异或运算符

10级优先级 左结合

| 按位或运算符

11级优先级 左结合

&& 逻辑与运算符

12级优先级 左结合

|| 逻辑或运算符

13级优先级 右结合

? : 条件运算符

14级优先级 右结合

= += -= *= /= %= &= ^= |= <<= >>= 全为赋值运算符

15级优先级 左结合

, 逗号运算符

14楼:匿名用户

c语言中运算符优先级如下图,优先级数字越小的优先级越高。

15楼:

优先级:自上到下由高到低

|(){}〔〕.(结构体成员运

算符)->(指向结构体成员运算符)

|单目运算符 !(非)--(自减)++(自加)~(按位取反)|算术运算符+ - * % /

|关系运算符< > >= <= ==

|&&和||

|赋值运算符 =

|逗号运算符 (表达式1),(表达式2),(表达式3)...还有就是左右运算顺序

a+b +为双目运算符, (a>b)?a:b 中? :为3目运算符. !a 为单目运算符.

单目,三目运算符都为自右向左结合,双目运算符除赋值运算符都为自左向右结合.

16楼:匿名用户

逗号运算符----

赋值运算符----

条件运算符----

逻辑运算符(不包括!)--

关系运算符---

算术运算符(先乘除,后加减)---

单目运算符---

初等运算符()->

按上到下优先级增大

c语言运算符优先级从高到低的顺序依次为?

17楼:同畅碧静晨

一共有十五个优先级:1()

.->2!

~-(负号)

++--

&(取变量地址)*

(type)(强制类型)

sizeof3*

/%4+

-5>>

<<6>>=<<=7==

!=8&9

^10|11

&&12

||13

?:14=+=

-=*=

/=%=

|=^=

&=>>=

<<=15,

就着多吧

结合性:2

1314

是从右至左

其他都是

从左至右

c语言中关系运算符的优先级高于逻辑运算符吗

1楼 不全是。关系运算符的优先级高于 逻辑与 和 逻辑或 ,但低于 逻辑非 。 2楼 匿名用户 逻辑运算符里面的 很厉害的,比算术运算符优先级还高 因此正确的说法 c语言中关系运算符的优先级高于逻辑与和逻辑或,但是低于逻辑非 3楼 是的不是有个优先级歌吗 圆方括号箭头一句号 自增自减非反负 针强地址...

c运算符-与什么等效,C语言的运算符和表达式有哪些

1楼 醒目鸟 1 表示比特位右移。效果与 除以 类似。右移一位即除以2,右移2位即除以4,右移3位即除以8 例如 数字8的二进制码为 00001000 右移一位后变为 00000100。 即00000100 4 2 还有一种含义 在c 里表示堆栈的指针位置。例如 this data 2楼 千锋教育 ...

移位运算符怎么移的,C语言移位运算符怎么用?

1楼 bytemask intmax 8 intmax 按2进制向左移动 2进制八位,右边补0,左边高位溢出丢弃 intmax 4294967195 16进制 0xffffff9b左移2进制八位 就是左移16进制2位, 16进制 0xffff9b00 打印出的10进制就不太容易看。 左移1位实际上等...