C語言基礎(1)

1.編譯器的選擇

我們的c語言是一門,我們寫的c語言代碼是文本文件(存放在.c為后綴的文件中),文本文件本身無法被執行,必須通過編譯器的編譯和鏈接器的鏈接,生成可執行的二進制文件,才能夠被執行

在這里插入圖片描述
注意:

  1. 每個源文件(.c文件)通過編譯器生成目標文件(后綴為.obj的文件)
  2. 多個目標文件和庫文件通過鏈接器生成可執行文件(.exe文件)
    3.一個工程里面一般會有多個源文件組成

編輯器和集成開發環境的區別
前面說到了我們c語言是一門編譯型的語言,需要編譯器將其轉換成機器能夠執行的機器指令

編譯器
msvc,gcc,clang是常見的編譯器

集成開發環境(IDE)

  • 集成開發環境一般包含代碼編輯器,編譯器,調試器和圖形用戶界面等,集成了代碼編寫功能,分析功能,編譯功能,調試功能等一化的開發軟件服務套
  • vs2022,XCode,CodeBlocks,Devc++都是常見的集成開發環境

vs2022集成了msvc,安裝包大一些,安裝簡單,無需多余配置,用起來很方便

XCode集成了clang,是蘋果電腦上的工具

CodeBlocks集成了gcc,這個工具需要配置,比較小眾

Devc++集成了gcc,小巧,但是工具過去簡單,對代碼風格的養成不好,通常是一些競賽在使用

2.main函數

每個c語言程序不管是有多少行的代碼,都是從main函數開始執行的,main函數是程序的入口,main函數前面的int表示函數結束的時候要返回一個整型類型的值,所以在main函數的最后寫return 0,正好前后呼應
在這里插入圖片描述

  • main函數是程序的入口
  • main函數有且只能有一個
  • 即使是一個項目里面有多個.c文件,也只能有一個main函數(因為程序的入口只有一個)

main函數的寫法

  1. 這是main函數過去的寫法
    在這里插入圖片描述
  2. void表示main函數不接受任何的參數
    在這里插入圖片描述
  3. 有參數的main函數
    在這里插入圖片描述
    如果不想使用main函數的參數,可以不寫,這些參數就是多余的,等到需要的時候再寫

3.printf和庫函數

printf函數

printf是一個庫函數,功能是在標準輸出設備上(一般指屏幕)上進行信息的打印
在這里插入圖片描述

庫函數

為了不再重復實現常見的代碼,提高程序員的開發效率,c語言標準規定了一組函數,這些函數由不同的編譯器實現,供程序員使用,這些函數組成了一個庫叫做標準庫,這些函數也被稱為庫函數
一個系列的庫函數一般會聲明在同一個頭文件里面,所以庫函數的使用,要包含對應的頭文件,比如stdio.h文件里面就是關于標準輸入輸出的函數

4.字符和ASCII編碼

在鍵盤上可以敲出各種的字符,a,@,#等都是字符,c語言中字符用單引號引起來,我們都知道我們的數據是以二進制的形式存儲的,我們一般會給字符進行二進制編號,給每一個字符編一個二進制序列,這就叫做編碼
但是每個人對字符進行編碼的序列會因人而異,為了統一,不造成混亂,美國國家標準學會出臺了一個標準ASCII編碼
在這里插入圖片描述

當我們想打印一個字符的時候,我們可以直接用字母進行打印,也可以用該字符對應的ASCII的值來表示(如下圖)
在這里插入圖片描述

注意:

  1. 字符A到Z的ASCII值是從65到90
  2. 字符a到z的ASCII值是從97到122
  3. 對應大小寫字符(A和a)的ASCII差值是32
  4. 數字字符0到9的ASCII值是從48到57
  5. 換行\n的ASCII值是10
  6. 這些字符中ASCII值從0到31的這31個字符是不可打印字符,無法在屏幕上觀察

5.字符串和\0

在c語言中字符串是用雙引號引起來的,字符串的打印格式是%s
在c語言的字符串中,字符串比較特殊,在字符串的末尾隱藏著一個\0,是字符串結束的標志,函數printf和strlen都是根據\0來判斷字符串是否結束的
在這里插入圖片描述
在這里插入圖片描述
如上圖我們以這種方式創建字符串,后面是有\0的
在這里插入圖片描述
在這里插入圖片描述
如果用上圖的方法來創建字符串的話就沒有隱藏的\0,于是這種情況在使用printf函數的時候,就會打印出一段亂碼才會停下,因為此字符串沒有\0,printf不知道字符串什么時候結束,直到打印到內存中其他的\0的位置才能停下(如下圖)
在這里插入圖片描述

如果我們手動的給這個字符串加上\0的話,問題也就被解決了
在這里插入圖片描述

如果我們打打印字符串的時候字符串的中間有\0的話,字符串的打印也會提前結束(如下圖)
在這里插入圖片描述

6.轉義字符

轉移字符顧名思義就是轉變原來字符的意思
比如我們的字符n,原來的意思就是一個簡單的字母n,前面加上\了以后,就轉變了原來的意思,變成換行的意思了

轉義字符作用
\?在書寫多個問號的時候,防止他們被解析成三字母詞,比如我們要打印( are you ok??)的時候,??)就會被解析成],于是我們就在?的前面加上/,于是就將三字母詞里的問號轉化成了一個普通的問號,在這里問號的意思被轉變了(如下圖)在這里插入圖片描述
\’表示字符常量‘,當我們想要打印一個’的時候,三個‘的時候會報錯,我們希望前后兩個’組成一隊,打印中間的‘,但是實際上前兩個’會組成一對,把最后一個‘剩下,于是程序就報錯了,所以我們需要中間的’只表示單純的字符,而不是字符兩邊的單引號在這里插入圖片描述在這里插入圖片描述
\”跟單引號是同理的
\\用于表示一個反斜杠,防止它被解析成轉移字符在這里插入圖片描述 、、、、、 我們的本意是要打印c:\test\ddd\test.c的但是\t是轉移字符在這里插入圖片描述打印出來如上圖所示,為了\不表示轉移字符里面的\,只是表示普通的\,我們在\的前面再加上一個\,將轉移字符的斜杠轉換為普通的斜杠在這里插入圖片描述
\a警報,這會使得終端發出警報聲或者出現閃爍,或者兩者同時發生
\b退格符,光標回退一個字符,但是不刪除字符 在這里插入圖片描述如上圖我們使用getchar函數輸入一個字符的時候,光標是在f的后面的,但是當我們在字符串后面加上\b的時候,光標會后退一位,也就是落在f前面,當getchar輸入字符的時候,就會將f給覆蓋掉在這里插入圖片描述
\r回車符,光標會移動到同一行的開頭,同樣的我們輸入一個字符同樣也會將這一行的第一個字符給覆蓋掉在這里插入圖片描述
\t制表符,光標移動到下一個水平制表符位,,也就是移動到下一個\t長度的倍數處,通常是4\8的倍數
\dddddd表示一到三哥八進制的數字,表示將ddd轉換成十進制在ASCII表里面對應的字符,如\130就代表字符x在這里插入圖片描述
\xdddd表示兩個十六進制數字,表示將dd轉化為十進制在ASCII表里面對應的字符,比如\x30表示0在這里插入圖片描述

\0其實是\ddd類的轉義字符,0轉換為十進制也是0,對應的ASCII表里面編號為0的字符,但是由于\0標志著字符串的結束,所以0編號處的字符是不存在的,是空的

7.注釋

在編譯的時候,注釋會被替換為空格,比如min/*這是一個注釋*/Value在編譯之后會變成min Value,而不是minValue

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

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

相關文章

Rust賦能美團云原生DevOps實踐

Rust 云原生 DevOps 實踐 在云原生環境中,Rust 的高性能與安全性使其成為構建微服務和基礎設施工具的理想選擇。Docker 作為容器化標準工具,結合 Rust 的跨平臺特性,可高效實現持續集成與部署(CI/CD)。 構建優化的 Rust Docker 鏡像 多階段構建是 Rust 項目容器化的關鍵…

計算機網絡實驗——配置ACL

ACL基礎一、實驗目的1. 配置H3C路由器基本ACL。二、實驗要求1. 熟練掌握網絡配置能力。2. 熟練掌握ACL基本配置。三、實驗步驟(1)使用reset saved-configuration命令和reboot命令,重置路由器原有配置,如圖1所示。圖 1(…

在本地部署mcp服務器實現自然語言操作mysql數據庫,輕松實現數據表的增~ 刪~ 改~ 查~

1.將寫好的mcp_server代碼放在本地任意盤! import asyncio import logging import os import sys from mysql.connector import connect, Error from mcp.server import Server from mcp.types import Resource, Tool, TextContent from pydantic import AnyUrl# Co…

2025快手創作者中心發布視頻python實現

難度還行,只有一個__NS_sig3加密,流程麻煩點cookies_list cookie.split("; ")cookie_dict {}# 遍歷每個 Cookie,根據等號將鍵值對拆分并添加到字典中for cookie in cookies_list:key_value cookie.split("")if len(ke…

Android 組件內核

文章目錄什么是binder1. 什么是Binder?2. Binder架構組成3. 工作原理與通信流程1)服務注冊2)服務查詢3)通信過程4)核心數據結構4. 關鍵技術點5. 常見面試考點1)Binder與傳統IPC(Socket、管道、共…

java類加載機制:Tomcat的類加載機制

Tomcat類加載機制深度解析:打破雙親委派的Web容器實現 Tomcat作為Java Web容器,其類加載機制為滿足Web應用的隔離性、熱部署和兼容性需求,對標準Java類加載機制進行了定制化擴展,核心是打破雙親委派模型并引入多層級類加載器。以下…

【PTA數據結構 | C語言版】從順序表 list 中刪除第 i 個元素

本專欄持續輸出數據結構題目集,歡迎訂閱。 文章目錄題目代碼題目 請編寫程序,將 n 個整數存入順序表,對任一指定的第 i 個位置,將這個位置上的元素從順序表中刪除。注意:i 代表位序,從 1 開始,…

VS2022 C++ EasyX庫 掃雷游戲項目開發:打造經典游戲的詳細之旅

老樣子,先上效果 視頻演示 C經典掃雷-介紹一、引言 在這篇博客中,我將詳細介紹掃雷游戲項目的開發過程。掃雷作為一款經典的游戲,其規則簡單但富有挑戰性。通過開發這個項目,我不僅加深了對 C 編程的理解,還提升了自己…

Go語言網絡游戲服務器模塊化編程

本文以使用origin框架(一款使用Go語言寫的開源游戲服務器框架)為例進行說明,當然也可以使用其它的框架或者自己寫。 在框架中PBProcessor用來處理Protobuf消息,在使用之前,需要使用Register函數注冊網絡消息&#xff…

【機器人】Aether 多任務世界模型 | 4D動態重建 | 視頻預測 | 視覺規劃

Aether 是一個的世界模型,整合幾何重建與生成建模的統一框架,實現類人空間推理能力。 來自ICCV 2025,該框架具有三大核心功能: (1) 4D動態重建,(2) 動作條件視頻預測, (3) 目標條件視覺規劃。 代碼地址&…

MiniMind:3小時訓練26MB微型語言模型,開源項目助力AI初學者快速入門

開發|界面|引擎|交付|副駕——重寫全棧法則:AI原生的倍速造應用流來自全棧程序員 nine 的探索與實踐,持續迭代中。 歡迎關注評論私信交流~ 在大型語言模型(LLaMA、GPT等)日益流行的今天,一個名為…

相機Camera日志實例分析之五:相機Camx【萌拍閃光燈后置拍照】單幀流程日志詳解

【關注我,后續持續新增專題博文,謝謝!!!】 上一篇我們講了: 這一篇我們開始講: 目錄 一、場景操作步驟 二、日志基礎關鍵字分級如下 三、場景日志如下: 一、場景操作步驟 操作步…

[2-02-02].第03節:環境搭建 - Win10搭建ES集群環境

ElasticSearch學習大綱 基于ElasticSearch7.8版本 一、ElasticStack下載: 1.Elasticsearch 的官方地址 2.Elasticsearch 下載地址: 二、集群搭建: 第1步:創建es目錄: 1.創建 elasticsearch-cluster 文件夾,在內部…

操作系統核心技術剖析:從Android驅動模型到鴻蒙微內核的國產化實踐

目錄 一、移動端操作系統技術細節 1. Android 內核版本 核心模塊 驅動架構 國內定制案例 2. iOS XNU內核關鍵模塊 安全機制 3. HarmonyOS 多內核架構 驅動隔離 二、PC端操作系統技術細節 1. Windows NT內核 模塊分層 驅動模型 國內適配 2. macOS(X…

整合Spring、Spring MVC與MyBatis:構建高效Java Web應用

本文將詳細講解如何整合Spring、Spring MVC和MyBatis(SSM框架),通過一個人員信息查詢案例展示完整開發流程。所有代碼基于提供的文件實現。一、項目結構src/ ├── main/ │ ├── java/ │ │ └── com/ │ │ └── qcb…

視頻插幀技術:從流暢觀影到AI創作的革命

一、起源:為什么需要視頻插幀? 視頻的本質是連續播放的靜態幀序列,幀率(FPS) 決定了流暢度。早期電影受限于拍攝技術和存儲成本,普遍采用24FPS,而現代顯示設備(如120Hz屏幕&#xf…

【一起來學AI大模型】PyTorch 實戰示例:使用 BatchNorm 處理張量(Tensor)

PyTorch 實戰示例 演示如何在神經網絡中使用 BatchNorm 處理張量(Tensor),涵蓋關鍵實現細節和常見陷阱。示例包含數據準備、模型構建、訓練/推理模式切換及結果分析。示例場景:在 CIFAR-10 數據集上實現帶 BatchNorm 的 CNNimport…

第8章:應用層協議HTTP、SDN軟件定義網絡、組播技術、QoS

應用層協議HTTP 應用層協議概述 應用層協議非常多,我們重點熟悉以下常見協議功能即可。 Telnet:遠程登錄協議,基于TCP 23端口,用于遠程管理設備,采用明文傳輸。安全外殼協議 (SecureShell,SSH) ,基于TCP 22端口,用于…

uniapp頁面間通信

uniapp中通過eventChannel實現頁面間通信的方法,這是一種官方推薦的高效傳參方式。我來解釋下這種方式的完整實現和注意事項:?發送頁面(父頁面)?:uni.navigateTo({url: /pages/detail/detail,success: (res) > {/…

Android ViewModel機制與底層原理詳解

Android 的 ViewModel 是 Jetpack 架構組件庫的核心部分,旨在以生命周期感知的方式存儲和管理與 UI 相關的數據。它的核心目標是解決兩大痛點: 數據持久化: 在配置變更(如屏幕旋轉、語言切換、多窗口模式切換)時保留數…