最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2022年04月19日 14:59:19   作者:清風自在 流水潺潺  
三目運算符,又稱條件運算符,它是唯一有3個操作數(shù)的運算符,有時又稱為三元運算符。三目運算符的結(jié)合性是右結(jié)合的;逗號表達式,是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;
}

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

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

  • 通過隱式類型轉(zhuǎn)換規(guī)則返回 b 和 c 中的較高類型
  • 當 b 和 c 不能隱式轉(zhuǎ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 個字節(jié)。

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

如果一個運算符兩邊的運算數(shù)類型不同,先要將其轉(zhuǎn)換為相同的類型,即較低類型轉(zhuǎn)換為較高類型,然后再參加運算,轉(zhuǎn)換規(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;
}

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

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

int a[3][3] = {

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

};

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

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

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

三、小結(jié)

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

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

相關(guān)文章

  • C語言深入探究函數(shù)的溯源

    C語言深入探究函數(shù)的溯源

    函數(shù)是一組一起執(zhí)行一個任務(wù)的語句。每個 C 程序都至少有一個函數(shù),即主函數(shù) main() ,所有簡單的程序都可以定義其他額外的函數(shù)
    2022-04-04
  • C++包管理工具vcpkg配置國內(nèi)鏡像源的操作流程

    C++包管理工具vcpkg配置國內(nèi)鏡像源的操作流程

    這篇文章主要介紹了如何配置國內(nèi)鏡像源來使用vcpkg管理C++包,包括使用環(huán)境變量、修改配置文件、手動下載工具和使用預(yù)編譯二進制文件等方法,并提供了一個完整的解決方案和分步安裝策略,需要的朋友可以參考下
    2025-11-11
  • 代碼分析c++中string類

    代碼分析c++中string類

    本篇內(nèi)容通過詳細的源代碼詳細分析了C++中string類的用法以及知識點,有興趣的讀者們參考下。
    2018-03-03
  • C語言二分查找算法及實現(xiàn)代碼

    C語言二分查找算法及實現(xiàn)代碼

    本文主要介紹C語言的二分查找算法,這里給大家詳細介紹了什么是二分查找,并提供代碼實例,需要的小伙伴可以參考下
    2016-07-07
  • C++實現(xiàn)LeetCode(642.設(shè)計搜索自動補全系統(tǒng))

    C++實現(xiàn)LeetCode(642.設(shè)計搜索自動補全系統(tǒng))

    這篇文章主要介紹了C++實現(xiàn)LeetCode(642.設(shè)計搜索自動補全系統(tǒng)),本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • 淺析VSCode launch.json中的各種替換變量的意思 ${workspaceFolder} ${file} ${fileBasename} ${fileDirname}等

    淺析VSCode launch.json中的各種替換變量的意思 ${workspaceFolder} ${file} $

    這篇文章主要介紹了VSCode launch.json中的各種替換變量的意思 ${workspaceFolder} ${file} ${fileBasename} ${fileDirname}等,非常不錯具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-03-03
  • 詳解基于Matlab的空心散點檢測

    詳解基于Matlab的空心散點檢測

    這篇文章主要介紹了如何利用Matlab實現(xiàn)空心散點檢測,文中的示例代碼講解詳細,對我們學習Matlab有一定的幫助,感興趣的可以跟隨小編了解一下
    2022-02-02
  • C++基于LINUX的文件操作

    C++基于LINUX的文件操作

    這篇文章主要為大家介紹了C++基于LINUX的文件操作示例知識擴充,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-11-11
  • C++11委托構(gòu)造函數(shù)和繼承構(gòu)造函數(shù)的實現(xiàn)

    C++11委托構(gòu)造函數(shù)和繼承構(gòu)造函數(shù)的實現(xiàn)

    C++引入了委托構(gòu)造函數(shù)和繼承構(gòu)造函數(shù)這兩個重要的特性,本文主要介紹了C++11委托構(gòu)造函數(shù)和繼承構(gòu)造函數(shù)的實現(xiàn),具有一定的參考價值,感興趣的可以了解一下
    2025-06-06
  • 最新C語言自定義類型詳解

    最新C語言自定義類型詳解

    生活當中有很多物品是不能簡單的用整型、浮點型、字符型來區(qū)分,它們常常是復(fù)雜的集合,比如人,一個人擁有年齡,身高、體重、學歷......等信息,我們可以用結(jié)構(gòu)體來實現(xiàn)準確描述人這種復(fù)雜集合,這篇文章主要介紹了C語言?自定義類型,需要的朋友可以參考下
    2023-01-01

最新評論

广丰县| 六安市| 永吉县| 咸丰县| 麦盖提县| 监利县| 涟水县| 雷州市| 深圳市| 北海市| 潼南县| 宝清县| 桃园县| 邹平县| 东乡县| 通化市| 罗江县| 河东区| 吉水县| 习水县| 阳高县| 昌乐县| 昌江| 金湖县| 电白县| 墨竹工卡县| 宣威市| 灯塔市| 崇明县| 株洲县| 南宁市| 大姚县| 宜君县| 平乡县| 安仁县| 清新县| 项城市| 余庆县| 邻水| 郁南县| 星子县|