main函式中帶了兩個引數,通常用int argc, char *ar**)
來表示,這兩個引數也可以不用使用,它們的意義分別是:第乙個表示引數的個數;第二個引數中ar**[0]為自身執行目錄路徑和程式名,ar**[1]指向第乙個引數、ar**[2]指向第二個引數……
sizeof
是乙個運算子,它的意義是計算出括號內內容所佔位元組數,資料型別是size_t
%lu
是32位無符號整數的格式控制字元
\n
是轉義字元,表示乙個換行符,\012
是乙個八進位制數,表示八進位制下的12;\xa1
是乙個十六進製制數,表示十六進製制下的a1。轉義字元都佔了1個位元組。
輸出結果第一行是int的位元組數,也就是4;第二行是乙個字串所佔的位元組數,經計算是11(注意還有\0
)。
printf()函式在計算的時候順序是從右往左的,但最後輸出的順序是從左往右的,因此第乙個printf的結果是1200 60
第二個printf函式裡面還包含了乙個函式printf,要先執行內部函式,輸出1270
,所以根據printf的返回值,外部的printf輸出的結果是5。
形參和實參的區別,形參不佔記憶體空間,因此不能使用malloc等函式為其賦予記憶體
不需要使用函式,直接str = "xiyou linux group"
即可。
通過指標呼叫函式
會先列印出字串str,在計算strlen函式並列印其結果
對與全域性變數來說,他們的儲存方式相同,但是當乙個源程式由多個原始檔組成時,非靜態的全域性變數在各個原始檔中都是有效的,而靜態全域性變數只在定義該變數的原始檔內有效
static區域性變數只被初始化一次,下一次再經過初始化會直接跳過
static函式和普通函式的作用域不同,只在當前原始檔中使用的函式應該使用static來修飾,表示內部函式
在本程式中,其實int a[2]
就相當於int a[4][2]
所以for迴圈內的輸出的是第乙個、第四個、第七個0
const關鍵字的作用是:被const修飾的變數將被視為唯讀,在初始化之後不能再被做任何修改
前兩種方式結果一樣,指標p所指向的空間不能再被修改
第三種是指標p的指向不能再被修改
最後一種是p的指向和指向的空間都不能再被修改
#include<>
是從系統的預設位置尋找檔案,而#include""
內需要程式設計師寫入檔案路徑,也就是乙個字串
#include
作為預處理的一步,其意義是將所指檔案中的所有內容拷貝到當前檔案的該位置處,也就是我們平常在呼叫某些函式的時候,這樣做就是對該函式有了宣告和定義。
在多檔案中使用#include
有助於使**更加美觀,增強可讀性。
在switch的大括號內,賦值等語句不會被執行
default**塊在switch中可有可無,甚至位置任意,但是要注意的是default後沒有break照樣會向下繼續執行,所以結果是4行
結果會輸出a+b = -10
首先,在if判定時出現了a+b,也就是乙個int型資料和unsigned int型資料進行相加,需要進行隱式型別轉換(int轉換成unsigned int),結果自然是大於0的
在進行輸出時,由於使用了%d作為格式轉換說明符,因此結果又應該從unsigned int轉化成int。
輸出結果是4,10
第乙個4好理解,是nums[1]
,即4
stdout是標準輸出
stderr是標準錯誤
兩者都預設向螢幕輸出
如果輸出到檔案,stdout就會正確的輸出到檔案,stderr會在螢幕
char型別資料佔了乙個位元組,範圍是-128~127
在for迴圈中,str[0] = -1,str[1] = -2…以此類推,總會有str[x] = -128,則str[x+1] = 127,str[y] = 0,當這個數為0的時候,strlen不再繼續向後計數
使用巨集定義:
#define swap(x,y) ((x) = (x) + (y),(y) = (x) - (y),(x) = (x) - (y))
很明顯在不同平台上a的值會相應地做出改變
此種方式的優點是可以大大增加**的移植性,在不同的平台上都可以使用
s佔了8個位元組,其中,a佔了第乙個位元組、b佔了第三第四個位元組、c佔了後四個位元組
經過修改後,可以將s的記憶體資料用二進位制表示出來:
0000
0011
0000
0000
0000
0000
0000
0101
0000
0000
0000
0000
0000
0000
0000
0111
0000
0000
0000
0000
0000
0000
0000
0111
0000
0000
0000
0101
0000
0000
0000
0011
輸出結果:
x1:ffff
x2:ffffffff
x3:ffffffff
__va_args__
是乙個可變的巨集,意義是巨集定義中引數列表的最後乙個引數為省略號
##
運算子可用於巨集函式的替換部分,這個運算子把兩個語言符號組成了單個語言符號,為巨集提供了一種連線多元的方式。
西郵Linux興趣小組2017納新試題總結
1.分析下列程式的輸出 int main int argc,char ar sizeof t 計算int型別大小,輸出為4 ab c佔4個位元組,n,012,2,還有結束符佔1個位元組,xal佔2個位元組 2.下面 會輸出什麼?int main int argc,char ar printf函式的執...
西郵Linux興趣小組2018納新面試題總結
對於一維陣列,1 array array 1 對於二維陣列,array i j i array j sizeof和strlen計算的區別是字串最後的那個 0,strlen不計算。前置 和後置 的區別 後置 是先取i的值做計算,計算後再自加1 a 預編譯,檔案字尾是.i b 編譯,進行一系列詞法分析 ...
西郵Linux興趣小組面試題總結(2020)
define 識別符號 字串 下面 段的輸出結果是什麼?輸出該結果的原因是?define x a b intmain int argc,char ar 相當於 intmain int argc,char ar 輸出結果為 4在巨集體中,如果巨集引數前加個 那麼在巨集體擴充套件的時候,巨集引數會被擴充...