武器大師——操作符詳解(下)

目錄

六、單目操作符

七、逗號表達式

八、下標引用以及函數調用

8.1.下標引用

8.2.函數調用

九、結構體

9.1.結構體

9.1.1結構的聲明

9.1.2結構體的定義和初始化

9.2.結構成員訪問操作符

9.2.1直接訪問

9.2.2間接訪問

十、操作符的屬性

10.1.優先性

10.2.結合性

十一、整形提升

結語


六、單目操作符

!、 ++ -- & * + - ~ sizeof ( 類型 )

?上述操作符中,我們在前面都說過,只有&和*沒有提及,這兩個操作符我們會在指針章節詳細介紹。

七、逗號表達式

a1,a2,a3,.....an

逗號表達式,就是用多個逗號隔開的多個表達式。

它是按從左到右的順序依次執行。整個表達式的結果是最后一個表達式的結果。

eg:

int a = 1;
int b = 2;
int c = (a>b, a=b+10, a, b=a+1);

首先,從左到右依次執行 ,先是a>b,然后把b+10賦給a,a就變成了12,最后再將a+1的值賦給b,這個表達式的值就是整個表達式的值,也就是13,所以c為13。

八、下標引用以及函數調用

8.1.下標引用

我們在數組中曾見過這對中括號,是的,它的名字叫下標引用。

操作數:數組名+索引值

eg:

int arr[10];//創建數組
arr[9] = 10;//實?下標引?操作符。
[]的兩個操作數是arr和9。

8.2.函數調用

這個相信大家也不陌生。

操作數:函數名+參數

問:函數調用最少有幾個操作數?

答:一個,只需要一個函數名即可。

#include <stdio.h>
void test1()
{printf("hehe\n");
}
void test2(const char *str)
{printf("%s\n", str);
}
int main()
{test1(); //這?的()就是作為函數調?操作符。test2("hello bit.");//這?的()就是函數調?操作符。return 0;
}

?接下來講點沒見過的。

九、結構體

我們今天只是簡單介紹,后面還會繼續詳細介紹結構體(又挖坑)。

9.1.結構體

我們之前學過許多數據類型結構,像short、char、int、double......但只有這些其實遠遠不夠,比如說我想描述一個學生的信息,身高體重各科成績等等。C語言為了解決這個問題,內置了結構體這種自定義類型,從此之后,我們可以創造出自己想要的類型。
結構是?些值的集合,這些值稱為成員變量。結構的每個成員可以是不同類型的變量,如:
標量、數組、指針,甚?是其他結構體。
9.1.1結構的聲明
struct tag
{member-list;//成員列表
}variable-list //變量列表

?其中tag表述結構體名,花括號里面放著成員列表,也就是要描述對象的各種屬性。變量列表用來存放定義為該結構體類型的變量。

struct Stu
{char name[20];//名字int age;//年齡char sex[5];//性別char id[20];//學號
}; //分號不能丟
9.1.2結構體的定義和初始化
//代碼1:變量的定義
struct Point
{int x;int y;
}p1; //聲明類型的同時定義變量p1
struct Point p2; //定義結構體變量p2
//代碼2:初始化。
struct Point p3 = {10, 20};
struct Stu //類型聲明
{char name[15];//名字int age; //年齡
};
struct Stu s1 = {"zhangsan", 20};//初始化
struct Stu s2 = {.age=20, .name="lisi"};//指定順序初始化
//代碼3
struct Node
{int data;struct Point p;struct Node* next; 
}n1 = {10, {4,5}, NULL}; //結構體嵌套初始化
struct Node n2 = {20, {5, 6}, NULL};//結構體嵌套初始化

9.2.結構成員訪問操作符

9.2.1直接訪問

使用方式:結構體變量?.?成員名

#include <stdio.h>
struct Point
{int x;int y;
}p = {1,2};
int main()
{printf("x: %d y: %d\n", p.x, p.y);return 0;
}

這個點很小,但是很有用!

9.2.2間接訪問

有的時候,我們得到的是結構體的地址,

使用方式:結構體指針(地址)->成員名

舉例如下:

#include <stdio.h>
struct Point
{int x;int y;
};
int main()
{struct Point p = {3, 4};struct Point *ptr = &p;ptr->x = 10;ptr->y = 20;printf("x = %d y = %d\n", ptr->x, ptr->y);return 0;
}

綜合舉例如下:

#include <stdio.h>
#include <string.h>
struct Stu
{char name[15];//名字int age; //年齡
};
void print_stu(struct Stu s)
{printf("%s %d\n", s.name, s.age);
}
void set_stu(struct Stu* ps)
{strcpy(ps->name, "李四");ps->age = 28;
}
int main()
{struct Stu s = { "張三", 20 };print_stu(s);set_stu(&s);print_stu(s);return 0;
}

十、操作符的屬性

10.1.優先性

參考鏈接:C 運算符優先級 - cppreference.com?

? ?圓括號( ()
? ?增運算符( ++ ),?減運算符( --
? 單?運算符( + -
? 乘法( * ),除法( /
? 加法( + ),減法( -
? 關系運算符( < > 等)
? 賦值運算符( =
由于圓括號的優先級最?,可以使?它改變其他運算符的優先級。
?
大概記住這些就夠了,其它可以現查表。

10.2.結合性

如果兩個運算符優先級相同,優先級沒辦法確定先計算哪個了,這時候就看結合性了,則根據運算符 是左結合,還是右結合,決定執?順序。?部分運算符是左結合(從左到右執?),少數運算符是右結合(從右到左執?),?如賦值運算符( = )。

十一、整形提升

C語?中整型算術運算總是?少以缺省整型類型的精度來進?的。

而為了獲得這種精度,表達式中的字符型和短整型在使用之前就會被轉換為整形,這種轉換叫整形提升?

表達式的整型運算要在CPU的相應運算器件內執?,CPU內整型運算器(ALU)的操作數的字節長度?般就是int的字節?度,同時也是CPU的通?寄存器的?度。
因此,即使兩個char類型的相加,在CPU執?時實際上也要先轉換為CPU內整型操作數的標準長度。
通?CPU(general-purpose CPU)是難以直接實現兩個8?特字節直接相加運算(雖然機器指令中可能有這種字節相加指令)。所以,表達式中各種?度可能?于int?度的整型值,都必須先轉換為int或unsigned int,然后才能送?CPU去執?運算。
char a,b,c;
...
a = b + c;

?首先,b和c被提升為整形然后運算賦給a。

如何進行整形提升呢?

1. 有符號整數提升是按照變量的數據類型的符號位來提升的
2. ?符號整數提升,?位補0
//負數的整形提升
char c1 = -1;
變量c1的?進制位(補碼)中只有8個?特位:
1111111
因為 char 為有符號的 char
所以整形提升的時候,?位補充符號位,即為1
提升之后的結果是:
11111111111111111111111111111111
//正數的整形提升
char c2 = 1;
變量c2的?進制位(補碼)中只有8個?特位:
00000001
因為 char 為有符號的 char
所以整形提升的時候,?位補充符號位,即為0
提升之后的結果是:
00000000000000000000000000000001
//?符號整形提升,?位補0

結語

有很多朋友問為什么以武器大師來做標題,這里結尾給大家解釋一下,因為我覺得它就像不同人手中不同的工具,比如算數操作符像是數學家手中的計算器,關系操作符像是偵探手中的證據對比工具,邏輯操作符類似于法官手中的判決書,位操作符更像電路工程師的開關和轉換器,賦值操作符像是建筑師手中的藍圖和材料......

其實我們學習每樣東西都是,雖然有時很抽象,但是我們總能找到解決辦法。

“細想全是問題,去做全是答案”。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/716934.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/716934.shtml
英文地址,請注明出處:http://en.pswp.cn/news/716934.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

sql基本語法+實驗實踐

sql語法 注釋&#xff1a; 單行 --注釋內容# 注釋內容多行 /* 注釋內容 */數據定義語言DDL 查詢所有數據庫 show databases;注意是databases而不是database。 查詢當前數據庫 select database();創建數據庫 create database [if not exists] 數據庫名 [default charset 字符…

備戰藍橋杯Day22 - 計數排序

計數排序問題描述 對列表進行排序&#xff0c;已知列表中的數范圍都在0-100之間。設計時間復雜度為O(n)的算法。 比如列表中有一串數字&#xff0c;2 5 3 1 6 3 2 1 &#xff0c;需要將他們按照從小到大的次序排列&#xff0c;得到1 1 2 2 3 3 5 6 的結果。那么此時計數排序是…

一:面試流程

面試 項目介紹功能測試接口測試性能測試測試用例 項目介紹 南網智搜是南方電網公司研發的搜索引擎&#xff0c;主要場景Web 端場景有搜索頻道、個人中心、和一些積分活動等&#xff0c;我在里面主要負責功能測試&#xff0c;接口測試&#xff0c;性能測試&#xff0c;壓力測試…

Jetson Xavier NX 開發板Ubuntu18.04 安裝arduino IDE詳細步驟

Jetson 平臺是arch架構&#xff0c;官網上面幾乎都是x86或者arm64的這兩種錯誤版本都存在匹配問題無法使用&#xff0c;不要下載不要下載&#xff01; uname -a #版本查詢1.正確下載打開方式 https://downloads.arduino.cc/arduino-1.8.19-linuxaarch64.tar.xz選擇自己想要下…

LeetCode #104 二叉樹的最大深度

104. 二叉樹的最大深度 題目 二叉樹的 最大深度 是指從根節點到最遠葉子節點的最長路徑上的節點數。 示例 1&#xff1a; 輸入&#xff1a;root [3,9,20,null,null,15,7] 輸出&#xff1a;3 示例 2&#xff1a; 輸入&#xff1a;root [1,null,2] 輸出&#xff1a;2 分析 …

【Godot4自學手冊】第十九節敵人的血量顯示及掉血特效

這一節&#xff0c;我主要學習敵人的血量顯示、掉血顯示和死亡效果。敵人的血量顯示和主人公的血量顯示有所不同&#xff0c;主要是在敵人頭頂有個紅色的血條&#xff0c;受到攻擊敵人的血條會減少&#xff0c;并且有掉血數量的文字顯示&#xff0c;效果如下&#xff1a; 一、…

《中華人民共和國消防法》(2021年修訂版)解讀

單選題&#xff08;共7題&#xff0c;每題5分&#xff09; 1、舉辦大型群眾性活動&#xff0c;承辦人應當依法向&#xff08;&#xff09;申請安全許可。 正確答案&#xff1a;B、公安機關 2、違反消防安全規定進入生產、儲存易燃易爆危險品場所的&#xff0c;情節嚴重的要處…

基于springboot+vue的醫院后臺管理系統

博主主頁&#xff1a;貓頭鷹源碼 博主簡介&#xff1a;Java領域優質創作者、CSDN博客專家、阿里云專家博主、公司架構師、全網粉絲5萬、專注Java技術領域和畢業設計項目實戰&#xff0c;歡迎高校老師\講師\同行交流合作 ?主要內容&#xff1a;畢業設計(Javaweb項目|小程序|Pyt…

胎神游戲集第一期

目錄 一、變色小跳龍 二、超級按鈕 三、超級迷宮 四 、城市守衛戰 五、 憤怒的小胎 既然是胎神游戲集&#xff0c;那當然要先感謝我們的胎神大大了 胎神洛谷名&#xff1a;TSzza 好了&#xff0c;言歸正傳&#xff0c;知道你們不喜歡啰嗦&#xff0c;直接上代碼 一、…

SMBGhost漏洞技術分析與防御方案

事件分析 最近國內外各安全廠商都發布了SMBGhost(CVE-2020-0796)漏洞的預警報告和分析報告&#xff0c;筆者利用周末休息時間也研究了一下&#xff0c;就算是做一個筆記了&#xff0c;分享給大家一起學習下&#xff0c;目前外面研究的POC大部分是通過SMB壓縮數據包長度整數溢出…

【openGL4.x手冊04】基元

一、說明 OpenGL 中的術語“基元”用于指代兩個相似但獨立的概念。 “原語”的第一個含義是指 OpenGL 使用的解釋方案來確定渲染時頂點流所代表的內容&#xff0c;例如“GL_POINTS”。這樣的頂點序列可以是任意長的。 “原語”的另一個含義&#xff0c;也稱為“基本原語”&…

如何根據玩家數量和游戲需求選擇最合適的服務器配置?

根據玩家數量和游戲需求選擇最合適的服務器配置&#xff0c;首先需要考慮游戲的類型、玩家數量、預計的在線時間以及對內存和CPU性能的需求綜合考慮。對于大型多人在線游戲&#xff0c;如MMORPG或MOBA等&#xff0c;由于需要更多的CPU核心數來支持更復雜的游戲邏輯和處理大量數…

操作系統|概述|系統分類——筆記

1.1_1操作系統的概念和功能 操作系統的概念 操作系統&#xff08;Operating System&#xff0c; OS&#xff09; 是指控制和管理整個計算機系統的 硬件和軟件 資源&#xff0c;并合理地組織調度計算機和工作和資源的分配&#xff1b; 1操作系統是系統資源的管理者 以提供給用…

springboot攔截器和過濾器

過濾器 Filter依賴于servlet容器&#xff0c;屬于servlet規范的一部分 Filter的生命周期由servlet容器管理 Filter可攔截所有web資源(包括jsp&#xff0c;Servlet&#xff0c;靜態資源&#xff0c;Controller) 自定義Filter import javax.servlet.*; WebFilter(urlPatterns …

文件的順序讀寫函數舉例介紹

目錄 例1&#xff1a;&#xff08;使用字符輸出函數fputc&#xff09;例2&#xff1a;&#xff08;使用字符輸入函數fgetc&#xff09;例3&#xff1a;&#xff08;使用文本行輸出函數fputs &#xff09;例4&#xff1a;&#xff08;使用文本行輸入函數fgets &#xff09;例5&a…

Docker基礎教程 - 2 Docker安裝

更好的閱讀體驗&#xff1a;點這里 &#xff08; www.doubibiji.com &#xff09; 2 Docker安裝 Docker 的官網地址&#xff1a;https://www.docker.com/&#xff0c;在官網可以找到 Docker Engine 的安裝步驟。 下面進行 Docker 環境的安裝&#xff0c;正常情況下 Docker …

服務發現:CP or AP?

1 服務發現的意義 為高可用&#xff0c;生產環境中服務提供方都以集群對外提供服務&#xff0c;集群里這些IP隨時可能變化&#xff0c;也需要用一本“通信錄”及時獲取對應服務節點&#xff0c;這獲取過程即“服務發現”。 對服務調用方和服務提供方&#xff0c;其契約就是接…

(3)(3.1) FlightDeck FrSky發射器應用程序

文章目錄 前言 1 概述 2 Turnkey Packages 3 參數說明 前言 ?Craft and Theory 的 FlightDeck 可讓你輕松查看飛行模式、高度、速度、姿態和關鍵系統警報&#xff0c;包括故障保護和電池錯誤&#xff0c;如電池不平衡警告和發射機低電量警報。 1 概述 Craft and Theory 的…

【自然語言處理】NLP入門(二):1、正則表達式與Python中的實現(2):字符串格式化輸出(%、format()、f-string)

文章目錄 一、前言二、正則表達式與Python中的實現1.字符串構造2. 字符串截取3. 字符串格式化輸出3.1 %符號格式化字符串1. 一般形式2. 常用格式字符3. 最小寬度和精度4. 進位制和科學計數法5. 多個對象的格式化輸出6. 典例 3.2 format()方法格式化字符串1. 一般形式2. 參數傳遞…

51單片機-(中斷系統)

51單片機-&#xff08;中斷系統&#xff09; 了解51單片機中斷系統、中斷源、中斷響應條件和優先級等&#xff0c;通過外部中斷0實現按鍵控制LED亮滅為例理解中斷工作原理和編程實現過程。 1.中斷系統結構 89C51/52的中斷系統有5個中斷源 &#xff0c;2個優先級&#xff0c;…