• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

C语言中?:是啥意义,注意?与:之间没东西

sgf201 2018-05-11 浏览量:1002
代码中看到一个表达  strdup(namespace ?: "libstrongswan"),这里namespace也是一个字符串,namespace ?: "libstrongswan"是否等价于namespace ?namespace ​: "libstrongswan"
0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 如果 namespace 为空就等于"libstrongswan",不为空namespace 值不变
    • 发布于 2018-05-11
    • 举报
    • 评论 2
    • 0
    • 0
sgf201 回复了 robe_zhang:那就是说等效于namespace ?namespace ​: "libstrongswan"​了是吧? 回复
robe_zhang 回复了 robe_zhang:是的 回复

其他答案 数量:14
  • ?:是一个三元计算符,?前面是一个判断语句,:左右是表达式值,如果?前为非0,则取左值,否则右值。

    • 发布于2018-05-11
    • 举报
    • 评论 1
    • 0
    • 0
sgf201 回复了 xdsnet :问的是左值 不存在的时候是啥意思 回复

  • 不知道对不对,, ? : 是三目运算符,如楼上所述:?前面是一个判断语句,:左右是表达式值,如果?前为非0,则取左值,否则右值。

    ?:之间没有东西就是空的,可以用空格代替,,namespace ?: "libstrongswan" ,namespace 结果是1,返回空namespace 结果是1,返回空字符串

    • 发布于2018-05-11
    • 举报
    • 评论 0
    • 0
    • 0

  • 是条件运算符。条件运算符是C语言中唯一的三目运算符,就是说他有三个运算对象。
    语法:
    表达式1?表达式2:表达式3

    先计算表达式1的值,若值为非0,则计算表达式2的值,并将表达式2的值作为整个条件表达式的结果;若表达式1的值为0,则计算表达式3的值,并将表达式3的值作为整个条件表达式的结果。

    例子:
    (a>b)?a+b:a-b
    a=8 b=4时,计算a+b=12 ,所以表达式结果为12
    a=4 b=8时,计算a-b=-4,所以表达式结果为-4
    • 发布于2018-05-11
    • 举报
    • 评论 1
    • 0
    • 0
sgf201 回复了 汉云 :问的是左值 不存在的时候是啥意思 回复

  • 这种表达式一般有三个参数的

    先计算第一个,如果为真则执行第二个

    如果为假则执行第三个

    • 发布于2018-05-12
    • 举报
    • 评论 1
    • 0
    • 0
sgf201 回复了 chen0000009 :问的是左值 不存在的时候是啥意思 回复

  • 条件表达式,三目运算符;根据第一个表达式的结果,如果为真执行第二个表达式,为假执行第三个
    • 发布于2018-05-12
    • 举报
    • 评论 1
    • 0
    • 0
sgf201 回复了 great_CC :问的是左值 不存在的时候是啥意思 回复

  • ?:中间没有东西应该就是空的指令吧,不做任何操作


    就像for(;;)两个分号之间也没有东西,就不进行比较,也就不会跳出这个for

    • 发布于2018-05-12
    • 举报
    • 评论 1
    • 0
    • 0
sgf201 回复了 Chauncey :问的是左值 不存在的时候是啥意思 回复

  • 问的是左值 不存在的时候是啥意思
    • 发布于2018-05-14
    • 举报
    • 评论 0
    • 0
    • 0

  • 左值不存在一般是判断语句肯定会得出0值的情况,这时其实相当于要执行一个肯定要返回0值的处理,然后给出一个值(把多个执行弄在一起的小技巧而已,不建议使用)。

    比如有一个函数可以对一些全局变量初始化,然后在后面的右值计算中需要用到这些值,就可以这样处理(一些值可能不是标准类型,不能直接作为参数传递)


    int abc(){
    //XXX=... //这里处理全局标准化情况
    return 0;
    }
    
    int bca(){
    ... // 这里使用XXX这样的全局标准化值以及其它状态,并且根据处理进行返回
    }
    
    xyz=abc()? :bca();


    • 发布于2018-05-14
    • 举报
    • 评论 2
    • 0
    • 0
sgf201 回复了 xdsnet :我这儿的应用场景下,namespace不一定为空呀 回复
xdsnet 回复了 sgf201 :那你需要检查你的逻辑,不是必须就不用这样写啊。 回复

  • ?:三目运算符,首先会判断前面两个值大小,然后返回后面的值
    • 发布于2018-05-14
    • 举报
    • 评论 0
    • 0
    • 0

  • 三目运算符 ? :  只是决定执行冒号前的表达式还是后面的表达式。如果不存在就不执行吧。
    • 发布于2018-05-14
    • 举报
    • 评论 0
    • 0
    • 0

  • 这个是三目运算符。

    计算表达式1的值,若值为非0,则计算表达式2的值,并将表达式2的值作为整个条件表达式的结果;若表达式1的值为0,则计算表达式3的值,并将表达式3的值作为整个条件表达式的结果。​

    • 发布于2018-05-14
    • 举报
    • 评论 0
    • 0
    • 0

  • 三目运算符 像a>b ?: c=1 : c=2     意思是a>b成立的话执行c=1否则执行 c=2
    • 发布于2018-05-16
    • 举报
    • 评论 0
    • 0
    • 0

  • 三目运算符,根据第一个表达式的结果去运行后两个表达式并返回
    • 发布于2018-05-16
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

C语言中?:是啥意义,注意?与:之间没东西