C和指針(一)

C和指針(一)

  • 預處理指令
  • main 函數
  • 常量及變量
    • 整型字面值
    • 指針:
    • 基本聲明:
    • 隱式聲明:
    • 常量:


預處理指令

預處理器用庫函數頭文件的內容替換掉相對應的#include指令語句。
使用stdio.h頭文件可以使我們訪問標準I/O庫中的函數。
另一種預處理指令是#define ,當這個名字以后出現在源文件的任何地方時,它就會被替換為定義的值。

 int read_column_numbers ( int columns [ ] , int max );void rearrange ( char *output, char const *input , int n_columns, int const columns[] );

這些聲明稱為函數原型 。它們告訴編譯器這些以后將在源文件中定義的函數的特征,這樣,這些函數被調用時,編譯器就能對它們進行準確性的檢查。每個原型以一個類型名為開頭,表示函數返回值的類型。跟在返回類型后面的是函數的名字, 再后面是函數期望接受的參數。所以,函數read_column_numbers 返回一個整數,接受兩個類型分別是整數數組和整形標量的參數。
rearrange函數接受4個參數,其中第一個和第二個參數都是指針。指針指定一個存儲于計算機內存中的值的地址。第2個和第4個參數被聲明為const,這表示函數將不會修改函數調用者所傳遞的這兩個參數。關鍵字void表示函數并不返回參數,在其他語言里,這種無返回的函數被稱為過程

main 函數

int main( void )
main是程序執行的起點。
在C語言中,數組參數是以引用形式進行傳遞的,也就是傳址調用,而標量和常量則是按值傳遞的。
所有傳遞給函數的參數都是按值傳遞的。
如今軟件開銷的最大之處并非在于編寫,而是在于維護。
常用printf格式代碼:

格式含義
%d以十進制形式打印一個整型值
%o以八進制形式打印一個整型值
%s以十六進制形式打印一個整型值
%g打印一個浮點值
%c打印一個字符
%s打印一個字符串

scanf函數中所有標量參數的前面必須加上一個“&”符號,數組參數前面不需要加上"&"符號,但是數組參數中如果加上了下標引用,也就是說實際參數是數組中某個特定元素,那么它的前面也必須加上“&”符號。

  scanf ( "%d", &columns[num] )  

常用scanf格式碼:

格式含義
%d讀取一個整型值 int
%ld讀取一個長整型值 long
%f讀取一個實型值(浮點數) float
%lf讀取一個雙精度實型值 double
%c讀取一個字符 char
%s從輸入中讀取一個字符串 char型數組

&& 是“邏輯與”操作符,&&操作符兩邊的表達式為真時,整個表達式才為真,如果左邊的表達式為假,右邊的表達式便不再進行求值。

= 賦值操作不是比較操作。

return語句就是函數向調用它的表達式返回一個值。

C語言的for語句:for ( col = 0; col , n_columns; col += 2) {初始部分,    測試部分,  調整部分

執行: 程序必須載入到內存中。執行程序代碼時,將使用一個運行時堆棧(stack),它用于存儲函數的局部變量和返回地址。程序同時可以使用靜態內存,存儲于靜態內存中的變量在程序的整個執行過程中將一直保留它們的值。
基本數據類型:整型家族包括字符、短整型、整型和長整型,分為有符號和無符號。
整型值互相之間的大小規則:長整型至少和整型一樣長,整型至少和短整型一樣長。

格式含義
char0到127
signed char-127到127
unsigned char0到256
short int-32767到32767
unsigned short int0到65535
int-32767到32767
unsigned int0到65535
long int-2147483647到2147483647
unsigned long int0到4294967295
    short int 至少16位,long int 至少32位。 

常量及變量

整型字面值

字面值 是字面值常量的縮寫,它指定了自身的值,并且不允許發生改變。 命名常量 (聲明為const的變量)與普通變量的區別在于,被初始化后,它的值便不能改變。
在整數字面值后面添加字符Ll,使整數被解釋為long整數值,字符Uu則用于把數值指定為unsigned整型值。如果在一個字面值后面添加UL,則解釋為unsigned long整型值
十六進制以0x開頭,八進制以0開頭。
字符常量 int類型。 是一個用單引號包圍起來的單個字符(或字符轉義序列或三字母詞)如:‘M’ ‘\n’ ‘\377’
浮點數字面值在缺省情況下都是double類型的,除非它的后面跟一個L或l表示是一個long double類型的值,或者跟一個F或f表示它是一個float類型的值。

指針:

變量存儲于計算機的內存中,每個變量都占據一個特定的位置。每個內存位置都由地址唯一確定并引用。
字符串常量是用一對雙引號包圍一串字符,“Hello” “\aWarning!\a” “” 即便是空字符串也存在作為終止符的NUL符號。

基本聲明:

變量聲明的基本形式是: 說明符(一個或多個) 聲明表達式列表
說明符包含了關鍵字,用于描述被聲明的標識符的基本類型。說明符也可以用于改變標識符的缺省存儲類型和作用域。

  Int I; char j, l, l;

初始化 是在變量名后跟一個等號(賦值號),后面是想要賦給變量的值。 Int j = 15;
聲明簡單數組 int values[ 20 ] ; 聲明了一個整型數組,數組包含20個整型元素。數組的下標是從0開始的,最后一個元素的下標是元素的數目減1.
聲明指針 int a ; 這條語句表示表達式a產生的結果類型是int。知道了*操作符執行的是間接訪問操作以后,我們可以推斷a是一個指向int的指針。

【 間接訪問操作只對指針變量才是合法的。指針指向結果值。對指針進行間接訪問操作可以獲得這個結果值。】

int* b, c, d; 錯誤 星號實際上是表達式*b的一部分,只對這個標識符有用。b是一個指針,但其余兩個變量只是普通的整型。要聲明三個指針,正確語句如下: int *b, *c, *d;

在聲明指針變量時,你也可以為它指定初始值。Char *message = “Hello world!”; 這條語句把message聲明為一個指向字符的指針,用于字符串常量中第一個字符的地址對該指針進行初始化。 前面一個聲明相當于是:
char *message; message = " Hello world! ";

隱式聲明:

C語言中有幾種聲明,它的類型名可以省略。函數如果不顯式地聲明返回值的類型,它就默認返回整型。
typedef: 允許為各種數據類型定義新名字。
char *ptr ; 把變量ptr聲明為一個指向字符的指針。 => typedef char *ptr ; 把標識符ptr作為指向字符的指針類型的新名字。 可以在下面的聲明中使用這個新名字ptr a; 聲明a是一個指向字符的指針。
應該使用typedef 而不是#define 來創建新的類型名。因為后者無法正確地處理指針類型。

            #define d_ptr_to_char char * d_ptr_to_char a ,b ;

正確地聲明了a ,但是b卻被聲明為一個字符。在定義復雜的類型名字時,如函數指針或指向數組的指針,使用typedef更為合適。

常量:

        常量和變量完全一樣,只是它們的值不能被修改。 如: int const  a;  const int  a; 都可以賦值  int const a = 15;  

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

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

相關文章

企業直播MR虛擬直播(MR混合現實直播技術)視頻介紹

到底什么是企業直播MR虛擬直播(MR混合現實直播技術)? 企業直播MR虛擬直播新玩法(MR混合現實直播技術) 我的文章推薦: [視頻圖文] 線上研討會是什么,企業對內對外培訓可以用線上研討會嗎&#x…

24屆近5年南京工業大學自動化考研院校分析

今天給大家帶來的是南京工業大學控制考研分析 滿滿干貨~還不快快點贊收藏 一、南京工業大學 學校簡介 南京工業大學(Nanjing Tech University),簡稱“南工”,位于江蘇省南京市,由國家國防科技工業局、住…

2023年之我拿起“java“

持續更新中………… 文章目錄 javajava基礎 了解 j a v a 的語法,從 H e l l o W o r l d 開始 \color{red}{了解java的語法,從HelloWorld開始} 了解java的語法,從HelloWorld開始 j a v a 語言的注釋 \color{red}{java語言的注釋} java語言的…

Vue3.2+TS的defineExpose的應用

defineExpose通俗來講,其實就是講子組件的方法或者數據,暴露給父組件進行使用,這樣對組件的封裝使用,有很大的幫助,那么defineExpose應該如何使用,下面我來用一些實際的代碼,帶大家快速學會defi…

VSCode 報錯 grep: /proc/version: 權限不夠

部分用戶在Linux上運行VSCode提示grep: /proc/version: 權限不夠 grep: /proc/version: 權限不夠 You are trying to start Visual Studio Code as a super user which isn’t recommended. If this was intended, please add the argument --no-sandbox and specify an alter…

GPT帶我學-設計模式-命令模式

1 你知道設計模式的命令模式嗎 是的,我知道設計模式中的命令模式。命令模式是一種行為型設計模式,它將請求封裝成一個對象,從而允許使用不同的請求、隊列或日志來參數化其他對象。命令模式還支持撤銷操作,并且可以提供事務的實現…

探討uniapp的網絡通信問題

uni-app 中有很多原生的 API,其中我們經常會用到的肯定有:uni.request(OBJECT) method 有效值 注意:method有效值必須大寫,每個平臺支持的method有效值不同,詳細見下表。 success 返回參數說明 data 數據說明 最終…

氣液固三相線識別—Langmuir部分復現

關注 M r . m a t e r i a l , \color{Violet} \rm Mr.material\ , Mr.material

c#和pdf.js實現分片預覽pdf

源碼如下&#xff1a; /// <summary>/// 文件處理/// </summary>[RoutePrefix("api/fs")]public class FileStoreController : ApiController{/// <summary>/// 文件預覽/// </summary>/// <param name"filepath">文件路徑…

【數據結構OJ題】移除鏈表元素

原題鏈接&#xff1a;https://leetcode.cn/problems/remove-linked-list-elements/description/ 1. 題目描述 2. 思路分析 我們可以定義一個結構體指針變量cur&#xff0c;讓cur一開始指向頭結點&#xff0c;同時定義一個結構體指針prev&#xff0c;令prev初始化為空指針NULL…

基于長短期神經網絡LSTM的碳排量預測,基于LSTM的碳排放量預測

目錄 背影 摘要 LSTM的基本定義 LSTM實現的步驟 基于長短期神經網絡LSTM的碳排放量預測 完整代碼: 基于長短期神經網絡LSTM的碳排放量預測,基于LSTM的碳排放量預測資源-CSDN文庫 https://download.csdn.net/download/abc991835105/88184632 效果圖 結果分析 展望 參考論文 背…

DIP:《Deep Image Prior》經典文獻閱讀總結與實現

文章目錄 Deep Image Prior1. 方法原理1.1 研究動機1.2 方法 2. 實驗驗證2.1 去噪2.2 超分辨率2.3 圖像修復2.4 消融實驗 3. 總結 Deep Image Prior 1. 方法原理 1.1 研究動機 動機 深度神經網絡在圖像復原和生成領域有非常好的表現一般歸功于神經網絡學習到了圖像的先驗信息…

Python解決-力扣002-兩數相加

兩數相加&#xff1a;鏈表表示的逆序整數求和 在這篇技術博客中&#xff0c;我們將討論一個力扣&#xff08;LeetCode&#xff09;上的編程題目&#xff1a;兩數相加。這個問題要求我們處理兩個非空鏈表&#xff0c;它們表示兩個非負整數。每個鏈表中的數字都是逆序存儲的&…

Redis——String類型詳解

概述 Redis中的字符串直接按照二進制的數據存儲&#xff0c;不會有任何的編碼轉換&#xff0c;因此存放什么樣&#xff0c;取出來的時候就什么樣。而MySQL默認的字符集是拉丁文&#xff0c;如果插入中文就會失敗 Redis中的字符串類型不僅可以存放文本數據&#xff0c;還可以存…

通過Python爬蟲提升網站搜索排名

目錄 怎么使用Python爬蟲提升排名 1. 抓取競爭對手數據&#xff1a; 2. 關鍵詞研究&#xff1a; 3. 網頁內容優化&#xff1a; 4. 內部鏈接建設&#xff1a; 5. 外部鏈接建設&#xff1a; 6. 監測和調整&#xff1a; 需要注意哪些方面 1. 合法性和道德性&#xff1a; …

VB+SQL期刊信息管理系統設計與實現

摘 要 本次畢業設計課題為“期刊信息管理系統”,該系統在正常運營中總是面對大量的讀者信息、期刊信息以及兩者相互作用產生的借刊信息,還刊信息。因此需要對讀者資源、期刊資源、借刊信息、還刊信息進行管理,及時了解各個環節中信息的變更,有利于提高管理效率。 此次畢…

阿里三年功能測試的一些感悟

一、前言 功能測試是測試工程師的基礎功&#xff0c;很多人功能測試還做不好&#xff0c;就想去做性能測試、自動化測試。很多人對功能測試的理解就是點點點&#xff0c;如何自己不用心去悟&#xff0c;去研究&#xff0c;那么你的職業生涯也就停留在點點點上了。在這里&#…

Flv格式視頻怎么轉MP4?視頻格式轉換方法分享

FLV格式的視頻是一種早期的視頻格式&#xff0c;不支持更高的分辨率和比特率&#xff0c;這意味著視頻的清晰度和質量受限制&#xff0c;無法很好地保留細節和質量&#xff0c;這種格式的視頻已經逐漸被更高質量的視頻格式所替代&#xff0c;例如MP4格式&#xff0c;不僅具有很…

Java基礎(七)排序算法

排序 1. 冒泡排序 >> 冒泡排序的思想 冒泡排序是一種簡單的排序算法&#xff0c;其基本思想是通過多次遍歷待排序序列&#xff0c;依次比較相鄰的元素并交換位置&#xff0c;使得每次遍歷后最大&#xff08;或最小&#xff09;的元素冒泡到序列的末尾。具體步驟如下&a…