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在巨集體中,如果巨集引數前加個 那麼在巨集體擴充套件的時候,巨集引數會被擴充...