欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C語言簡明講解三目運算符和逗號表達式的使用

 更新時間:2022年04月19日 14:59:19   作者:清風自在 流水潺潺  
三目運算符,又稱條件運算符,它是唯一有3個操作數(shù)的運算符,有時又稱為三元運算符。三目運算符的結合性是右結合的;逗號表達式,是c語言中的逗號運算符,優(yōu)先級別最低,它將兩個及其以上的式子聯(lián)接起來,從左往右逐個計算表達式,整個表達式的值為最后一個表達式的值

一、三目運算符

三目運算符( a ? b : c)可以作為邏輯運算的載體

規(guī)則:當 a 的值為真時,返回 b 的值;否則返回 c 的值

下面看一段代碼:

#include <stdio.h>
 
int main()
{
    int a = 1;
    int b = 2;
    int c = 0;
    
    c = a < b ? a : b;
    
    (a < b ? a : b) = 3;
    
    printf("%d\n", a);
    printf("%d\n", b);
    printf("%d\n", c);
    
    return 0;
}

編譯時會發(fā)現(xiàn)報錯:

這是因為三目運算符返回的是值,而不是變量,所以報錯。

看看下面做法,將地址作為三目運算符的返回,就可以:

#include <stdio.h>
 
int main()
{
    int a = 1;
    int b = 2;
    int c = 0;
    
    c = a < b ? a : b;
    
    *(a < b ? &a : &b) = 3;
    
    printf("%d\n", a);
    printf("%d\n", b);
    printf("%d\n", c);
    
    return 0;
}

下面為輸出結果:

三目運算符( a ? b : c)的返回類型

  • 通過隱式類型轉換規(guī)則返回 b 和 c 中的較高類型
  • 當 b 和 c 不能隱式轉換到同一類型時將編譯出錯

下面看一段代碼,看看三目運算符的返回類型:

#include <stdio.h>
 
int main()
{   
    char c = 0;
    short s = 0;
    int i = 0;
    double d = 0;
    char* p = "str";
        
    printf( "%d\n", sizeof(c ? c : s) );
    printf( "%d\n", sizeof(i ? i : d) );
    //printf( "%d\n", sizeof(d ? d : p) );
    return 0;
}

下面為輸出結果:

char 和 short 在一起,返回 int 類型,占 4 個字節(jié)。

關于 char 和 short 返回 int 類型,我的理解如下:

如果一個運算符兩邊的運算數(shù)類型不同,先要將其轉換為相同的類型,即較低類型轉換為較高類型,然后再參加運算,轉換規(guī)則如下圖所示。

double ←── float 高

long

unsigned

int ←── char,short 低

二、逗號表達式

  • 逗號表達式是C語言中的“粘貼劑”
  • 逗號表達式用于將多個子表達式連接為一個表達式
  • 逗號表達式的值為最后一個子表達式的值
  • 逗號表達式中的前 N-1 個子表達式可以沒有返回值
  • 逗號表達式按照從左向右的順序計算每個子表達式的值

如下:

下面看一個逗號表達式的示例:

#include <stdio.h>
 
void hello()
{
    printf("Hello!\n");
}
 
int main()
{   
    int a[3][3] = {
        (0, 1, 2),
        (3, 4, 5),
        (6, 7, 8)
    };
    
    int i = 0;
    int j = 0;
    
    while( i < 5 )
        printf("i = %d\n", i),
        
    hello(),
    
    i++;
        
    for(i=0; i<3; i++)
    {
        for(j=0; j<3; j++)
        {
            printf("a[%d][%d] = %d\n", i, j, a[i][j]);
        }
    }
 
    return 0;
}

下面為輸出結果:

為什么打印出來的 a 數(shù)組和我們預想的不一樣呢,這是因為

int a[3][3] = {

(0, 1, 2), (3, 4, 5), (6, 7, 8)

};

里面的逗號構成了逗號表達式,逗號表達式的值為最后一個子表達式的值,相當于

int a[3][3] = {

2,

5,

8

};

而且,二維數(shù)組的初始化也不是那樣,而是

int a[3][3] = {

{0, 1, 2},

{3, 4, 5},

{6, 7, 8}

};

這點一定要注意,不要弄錯?。?!

下面再來看一個一行代碼實現(xiàn) strlen :

#include <stdio.h>
#include <assert.h>
 
int strlen(const char* s)
{  
    return assert(s), (*s ? strlen(s + 1) + 1 : 0);
}
 
int main()
{   
    printf("len = %d\n", strlen("Autumn"));
    printf("len = %d\n", strlen(NULL));
    
    return 0;
}

下面為輸出結果:

三、小結

  • 三目運算符返回變量的值,而不是變量本身
  • 三目運算符通過隱式類型轉換規(guī)則確認返回值類型
  • 逗號表達式按照從左向右的順序計算每個子表達式的值
  • 逗號表達式的值為最后一個子表達式的值

到此這篇關于C語言簡明講解三目運算符和逗號表達式的使用的文章就介紹到這了,更多相關C語言 三目運算符內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 常用排序算法的C語言版實現(xiàn)示例整理

    常用排序算法的C語言版實現(xiàn)示例整理

    這篇文章主要介紹了常用排序算法的C語言版實現(xiàn)示例整理,包括快速排序及冒泡排序等,基本上都給出了時間復雜度,需要的朋友可以參考下
    2016-03-03
  • StretchBlt函數(shù)和BitBlt函數(shù)用法案例詳解

    StretchBlt函數(shù)和BitBlt函數(shù)用法案例詳解

    這篇文章主要介紹了StretchBlt函數(shù)和BitBlt函數(shù)用法案例詳解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • 帶你了解C++的數(shù)組與函數(shù)

    帶你了解C++的數(shù)組與函數(shù)

    這篇文章主要介紹了C++的數(shù)組與函數(shù),包括數(shù)組的初始化等基本知識,需要的朋友可以參考下,希望能給你帶來幫助
    2021-08-08
  • C++實現(xiàn)圖書館系統(tǒng)

    C++實現(xiàn)圖書館系統(tǒng)

    這篇文章主要為大家詳細介紹了C++實現(xiàn)圖書館系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • C++ boost::asio編程-域名解析詳細介紹

    C++ boost::asio編程-域名解析詳細介紹

    這篇文章主要介紹了C++ boost::asio編程-域名解析詳細介紹的相關資料,這里附有實例代碼,幫助大家學習理解這部分知識,需要的朋友可以參考下
    2016-11-11
  • c++插入排序詳解

    c++插入排序詳解

    插入排序的基本思想是每次將一個待排序的記錄,按其關鍵字大小插入到前面已經(jīng)排好序的子文件中的適當位置,直到全部記錄插入完成為止。下面我們來詳細探討下C++實現(xiàn)插入排序
    2017-05-05
  • C++實現(xiàn)不能被繼承的類實例分析

    C++實現(xiàn)不能被繼承的類實例分析

    這篇文章主要介紹了C++實現(xiàn)不能被繼承的類實例分析,對于C++初學者而言可以通過本文實例更好的理解類的原理及運用,需要的朋友可以參考下
    2014-08-08
  • C++線程同步實例分析

    C++線程同步實例分析

    這篇文章主要介紹了C++線程同步實例分析,以實例的形式較為深入的分析了C++的線程同步問題,是一個較為經(jīng)典的線程同步問題,需要的朋友可以參考下
    2014-10-10
  • C++14新特性的所有知識點全在這

    C++14新特性的所有知識點全在這

    這篇文章主要介紹了C++14新特性的所有知識點全在這,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-07-07
  • 詳解在VScode中添加代碼塊(含C++指令生成代碼)

    詳解在VScode中添加代碼塊(含C++指令生成代碼)

    這篇文章主要介紹了詳解在VScode中添加代碼塊(含C++指令生成代碼),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-04-04

最新評論