亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

C語言簡明講解三目運(yùn)算符和逗號表達(dá)式的使用

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

一、三目運(yùn)算符

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

規(guī)則:當(dāng) a 的值為真時(shí),返回 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;
}

編譯時(shí)會(huì)發(fā)現(xiàn)報(bào)錯(cuò):

這是因?yàn)槿窟\(yùn)算符返回的是值,而不是變量,所以報(bào)錯(cuò)。

看看下面做法,將地址作為三目運(yù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;
}

下面為輸出結(jié)果:

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

  • 通過隱式類型轉(zhuǎn)換規(guī)則返回 b 和 c 中的較高類型
  • 當(dāng) b 和 c 不能隱式轉(zhuǎn)換到同一類型時(shí)將編譯出錯(cuò)

下面看一段代碼,看看三目運(yùn)算符的返回類型:

#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;
}

下面為輸出結(jié)果:

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

關(guān)于 char 和 short 返回 int 類型,我的理解如下:

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

double ←── float 高

long

unsigned

int ←── char,short 低

二、逗號表達(dá)式

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

如下:

下面看一個(gè)逗號表達(dá)式的示例:

#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;
}

下面為輸出結(jié)果:

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

int a[3][3] = {

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

};

里面的逗號構(gòu)成了逗號表達(dá)式,逗號表達(dá)式的值為最后一個(gè)子表達(dá)式的值,相當(dāng)于

int a[3][3] = {

2,

5,

8

};

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

int a[3][3] = {

{0, 1, 2},

{3, 4, 5},

{6, 7, 8}

};

這點(diǎn)一定要注意,不要弄錯(cuò)?。?!

下面再來看一個(gè)一行代碼實(shí)現(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;
}

下面為輸出結(jié)果:

三、小結(jié)

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

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

相關(guān)文章

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

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

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

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

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

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

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

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

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

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

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

    c++插入排序詳解

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

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

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

    C++線程同步實(shí)例分析

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

    C++14新特性的所有知識點(diǎn)全在這

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

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

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

最新評論