格式: scanf(“格式控制串”,地址表)
功能:按指定格式從鍵盤讀入數據,存入地址表指定
存儲單元中,並按回車鍵結束
返值:正常,返回輸入數據個數
參數:地址表,使用&+變量名代表變量地址
格式控制串
整形:%d,%i 有符號的十進制整型數、%o 八進制整型數、%#X 十六進制整型數、%u 打印無符號數
浮點型:%f 單精度有符號浮點型數、%e 用科學記數法表示浮點數、%g 打印%f與%e較短的
字符型:%c 字符型、%s 字符串
修飾:%ld 打印長整型數、%lf 打印雙精度浮點型數、%hd 短整型數、%lld 長長整型、%% 輸出%本身
bool x=true; ALOGE(" wqtest test bool x: %u", x); 1型 bool y=false; ALOGE(" wqtest test bool y: %u", y); 0
0表示假;非0表示真(1)
2.printf( stream, "%s%c", s, c );%s -- 打印格式,按字符串方式輸出變量s的值(字符串)到文件流stream
%c -- 打印格式,按ASCII字符方式輸出變量c的值(即打印一個字符)到文件流stream
附加格式說明符(修飾符)
m輸出數據域寬,數據長度<m,左補空格;否則按實際輸出
.n對實數,指定小數點後位數(四捨五入)
對字符串,指定實際輸出位數
-輸出數據在域內左對齊(缺省右對齊)
+指定在有符號數的正數前顯示正號(+)
0輸出數值時指定左面不使用的空位置自動填0
#在八進制和十六進制數前顯示前導0,0x
l在d,o,x,u前,指定輸出精度爲long型
在e,f,g前,指定輸出精度爲double型
\t製表符
\a響鈴
\r回車
\\輸出\
\n換行
3.putchar()字符輸出函數
格式:putchar( c )
參數:c爲字符常量、變量或表達式
功能:把字符c輸出到顯示器上
返值:正常,爲顯示的代碼值;
4.getchar()字符輸入函數
格式:getchar()
功能:從鍵盤讀一字符
返值:正常,返回讀取的代碼值;出錯,返回EOF(-1)
5.puts()字符串輸出函數
'\0'與'0'
格式:puts(字符數組)
功能:向顯示器輸出字符串(輸出完,換行)
說明:字符數組必須以‘\0’結束
6.gets()字符串輸入函數
格式:gets(字符數組)
功能:從鍵盤輸入一以回車結束的字符串放入字符數組中,並自動加‘\0’
說明:輸入串長度應小於字符數組維數
指針
在計算機內部存儲器(簡稱內存)中,每一個字節單元,都有一個編號,稱爲地址。內存單元的地址稱爲指針,專門用來存放另一個變量的地址的變量。指針的存儲類型是4個字節的目標變量的地址。指針的類型是指針所指向的目標變量的類型
<存儲類型> <數據類型> *<指針變量名>;
定義一個指針變量p及數組data
int *p,data[10];
p = data 等於 p = &data[0] (p指向data的第一個元素)
*(p+n) 等於 data[n]
char *ch = "hello world\n"; 等於 char a[] = "hello world\n";
&與*運算符
&含義:取變量的地址
*含義:取指針所指向變量的內容
直接訪問與間接訪問
直接訪問:按變量地址存取變量值
間接訪問:通過存放變量地址的變量去訪問變量
指針與數組
數組的指針是指數組在內存中的起始地址,數組元素的地址是指數組元素在內存中的起始地址。一維數組的數組名爲一維數組的指針(起始地址)。
指針與一維數組*
int a [10];int *p=a;
a[i]、*(a+i)、*(p+i)和p[i]具有完全相同的功能:訪問數組第i+1個數組元素。注意:指針變量和數組在訪問數組中元素時,一定條件下其使用方法具有相同的形式,因爲指針變量和數組名都是地址量。但指針變量和數組的指針(或叫數組名)在本質上不同,指針變量是地址變量,而數組的指針是地址常量
p++;指針向地址大的方向移動一個單位
a++;這種操作是錯誤的,數組名是地址常量。不能夠進行自加或自減操作
p= a+1;
二維數組表示多個有序的一維數組(每個一維數組當作一個元素)
字符指針與字符串
C語言通過使用char數據類型的數組來處理字符串。
在字符數組中,每個數組元素都是char數據類型的變量。通常,我們把char數據類型的指針變量稱爲字符指針變量。字符指針變量與字符數組有着密切關係,它也被用來處理字符串。輸出時,char *p; p = "qwer"; 輸出項爲指針p,輸出p指向的字符串"qwer";輸出項爲 *p,輸出爲指針變量當前指向的單個字符‘q’
在程序中,初始化字符指針是把內存中字符串的首地址賦予指針,並不是把該字符串複製到指針中。另外,向字符指針賦給一個字符串常量時,指針應該指向一個存儲空間。
char*p = "hello world";指針變量可以直接指向字符串常量
指針數組:由若干個具有相同存儲類型和數據類型的指針變量構成的集合。
<存儲類型> <數據類型> *<指針變量數組名>[<大小>];
指針數組名就表示該指針數組的存儲首地址,即指針數組名爲數組的指針。
數組指針:
數組名代表數組第一個元素的首地址
對數組名取地址代表取整片數組空間的首地址,其類型數組指針
inta[10];int (*p)[10] = &a;
const修飾指針
constint *p; const修飾*p,代表指針指向的內容不能被修改,指針的指向可以修改,同intconst * p;
int* const p; const修飾p,代表指針的值不可被修改,指針指向的內容可以被修改
constint * const p;指針指向與指針的值都不可被修改
void指針
void型的指針變量是一種不確定數據類型的指針變量,它可以通過強制類型轉換讓該變量指向任何數據類型的變量或數組。
一般形式爲:
void *<指針變量名稱>;
對於void型的指針變量,實際使用時,一般需通過強制類型轉換才能使void型指針變量得到具體變量或數組地址。在沒有強制類型轉換之前,void型指針變量不能進行任何指針的算術運算
地址傳遞方式,被調用函數中對形參的操作,將直接改變實參的值。調用函數將實參的地址傳送給被調用函數,被調用函數對該地址的目標操作,相當於對實參本身的操作。按地址傳遞,實參爲變量的地址,而形參爲同類型的指針。
關鍵字
1.基本數據:void、char、int、float、double
2.類型修飾:short、long、signed :修飾整型數據,有符號數據類型、unsigned :修飾整型數據,無符號數據類型
3.複雜類型關鍵字:struct(結構體聲明)、union(共用體聲明)、enum(枚舉聲明)、typedef(聲明類型別名)、sizeof(得到特定類型或特定類型變量的大小)
4.存儲級別:auto(指定爲自動變量,由編譯器自動分配及釋放。通常在棧上分配)、static(靜態變量,靜態局部變量的值將被保留)、register(寄存器變量)、extern(對應變量爲外部變量)、const(變量不可被當前線程/進程改變(但有可能被系統或其他線程/進程改變)、volatile(變量的值有可能會被系統或其他進程/線程改變,強制編譯器每次從內存中取得該變量的值)
5.流程控制:return;continue(結束當前循環,開始下一輪循環)、break(跳出當前循環或switch結構)、goto(無條件跳轉語句)、if、else、switch、case、default、for、do、while
I/O 操作:文件的讀r,是計算機的輸入操作;文件的寫w,是計算機的輸出操作。(fopen、fclose、putc、getc、fputs、fgets、fread、fwrite)
數組的空間分配.如int a[10];——會在空間分配出40個相鄰的內存單元來(10*4)。
int *pa; pa = &a[0]; |
int *pa; int a[10]; pa = &a[0];