首页 > 其他分享 >一不小心就容易出错的c语言运算符优先级

一不小心就容易出错的c语言运算符优先级

时间:2024-12-03 18:03:54浏览次数:6  
标签:ab 优先级 name int 运算符 100 main 一不小心

    有些人说c语言是简洁高效的,又有些人说c语言是深邃复杂的,说实话,这确实是仁者见仁智者见智。但是有一点不可否认,c语言中的运算符众多,不注意的话,确实很容易弄错。

一、*与.的优先级比较

    对于一个结构体p包含一个指针*f,那么*p.f的运算优先规则是怎样?

    *p.f = *(p.f)

int main() {

    struct student{
        char *name;
        int score;
    };

    struct student stu ;
    stu.name = "tpc";
    stu.score = 100;

    printf("the first name is %c\n",*stu.name);
    printf("the first name is %c\n",*(stu.name));
    

}

 

二、*与[]的优先级比较

    int *ab[]。

错误结合:int (*ab)[],代表ab是一个指向整数数据的指针。 

正确结合:int *(ab[]),代表ab是一个存储整数指针的的数组 

int main() {

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

    int *ab[] = {&ta[0][0], &ta[1][0]};

    for(int i=0;i<2;i++){
        printf("the element %d value is %d\n", i, *ab[i]);
    }


}

 

三、*与()的优先级比较

    int *ab()

错误结合:int (*ab)(),代表ab是返回整数的函数指针。 

正确结合:int *(ab()),代表ab是一个返回整数指针的函数

int *ab(){
    int *t = (int *) malloc(sizeof(int));
    *t = 100;
    return t;
}


int main() {

    int *a = ab();

    printf("the method return value is %d\n", *a);
    free(a);

}

 

四、等于比较符号与位操作的优先级比较

    if(a&mask !=0)

错误结合:if((a&mask) != 0) 

正确结合:if(a&(mask != 0))

int main() {

    int a=101;
    int mask = 1;

    if(a&mask!=0){
        printf("the mask is bigger than zero\n");
    }

}

 

五、等于比较符号与赋值符的优先级比较

    int a = b !=100;

错误结合:int  (a = b) != 100

正确结合:int a = (b != 100)

int main() {

    int b = 100;
    int a = b !=0;
    printf("the a is %d\n", a);

}

 

六、算术运算符号与移位符的优先级比较

    a << 4 + 1

错误结合:(a << 4) + 1

正确结合:a << (4+1)

int main() {

    int a = 1;
    a = a << 4+1;
    printf("the a is %d\n", a);
    int b = 1;
    b = (b<<4)+1;
    printf("the b is %d", b);

}

 

标签:ab,优先级,name,int,运算符,100,main,一不小心
From: https://blog.csdn.net/tpc4289/article/details/144216375

相关文章

  • 逻辑运算符
    逻辑运算符在程序开发中,通常在判断条件时,需要同时判断多个条件,只有多个条件都满足,才能执行后续代码,这个时候需要用到逻辑运算符运算符逻辑表达式描述实例andxandy布尔“与”:如果x为False,xandy返回False,否则它返回y的值。TrueandFalse,返回False。or......
  • JavaScript 运算符
    JavaScript 运算符运算符=用于赋值。运算符+用于加值。运算符=用于给JavaScript变量赋值。算术运算符 + 用于把值加起来。实例指定变量值,并将值相加:y=5;z=2;x=y+z;在以上语句执行后,x 的值是:7尝试一下»JavaScript算术运算符与/或值之间的算术......
  • 这两种展开运算符的方式有什么区别呢?
    在JavaScript的前端开发中,有两种主要的展开运算符(spreadoperator)...的用法,它们分别应用于数组/类数组和对象。虽然符号相同,但作用略有不同:1.数组/类数组的展开:作用:将数组或类数组的元素"展开"成独立的项。场景:复制数组:创建一个新数组,包含原数组所有元素......
  • C#面向对象之抽象,接口,运算符重载,属性,索引器
    目录1抽象1.1抽象方法1.1.1抽象方法1.1.2虚方法1.1.3new1.2抽象属性1.3抽象示例2接口2.1定义2.2简单使用2.2.1声明使用接口2.2.2接口继承2.3接口显式实现和隐式实现2.3.1隐式实现2.3.2显式实现2.3.3多接口实现中的应用3运算符重载operator3.1简介3.2示例4属......
  • 【C++】数据的输入、运算符(上)
    1.数据的输入作用:用于从键盘上获取数据关键字:cin语法:cin>>变量;例如:代码:#include<iostream>usingnamespace std;intmain(){   //整形数据   inta=0;   cout<<"请给整型变量a赋值:"<<endl;   cin>>a;   cout<<"整型变量a="......
  • Python入门基础语法之运算符类型和语法
    运算符类型和语法运算符基本概念需注意,虽然python中无常量,但人为规定,在运行过程中值不能改变的为常量,要全部大写。操作数:参与运算的变量或者常量或具体的数值操作符:将参与运算的量连接起来的符号表达式:由操作数和操作符构成且符合python语法规范的式子,不同的操作符可以......
  • #Js篇: 链式判断运算符 ?.和Null判断运算符 ??和逻辑赋值运算符||= &&= ??=
    链式判断运算符?.?.运算符,直接在链式调用的时候判断,左侧的对象是否为null或undefined。如果是的,就不再往下运算,而是返回undefined。链判断运算符?.有三种写法。obj?.prop//对象属性是否存在obj?.[expr]//同上func?.(…args)//函数或对象方法是否存在下面是obj?......
  • 运算符的应用
    '''运算符的应用:1.基本加减乘除2.赋值3.比较4.逻辑6.成员运算符'''#加减乘除#字符串的加法:两个字符串拼接#数字加字符串,报错#list加法:将多个list合并为一个#减法操作:只支持Number类型的运算#乘法操作,*'''1.number类型的乘法2.str*int:str重复int次'''......
  • 【嵌入式C语言】常用关键字及运算符操作
    常用关键字及运算符操作关键字杂项sizeofreturn数据类型charint进制表示long、shortunsigned,signedfloat、doublevoid自定义数据类型structunionenumtypedef逻辑结构类型修饰符【重点】掌握C语言的常用关键字及其应用场景,使用技巧掌握位运算的典型操作掌握常用......
  • [Javascript] 等号运算符的运算和转换规则
    ==从上到下按照规则比较,直到能够得到确切结果为止:1.两端存在NaN,返回false2.undefined和null只有与自身比较,或者互相比较时,才会返回true,和其他原始类型比较返回false3.两端类型相同,比较值4.两端都是原始类型,转换成数字重新比较5.一端是原始类型,一端是对象类型,把对象......