C入門

1.scanf()標準格式輸入函數
    格式: 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

#在八進制和十六進制數前顯示前導00x

ld,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)。

3.指針操作數組
int *pa;
pa = &a[0];

 
 4.指針移動
int *pa;
int a[10];
pa = &a[0];
pa+1將指向下一個元素a[1]:
 >> 內存中的變化:"指針加1"會根據指針指定的類型int移動4個內存單元,其實本身並沒有移動,只是pa+1等於第5個內存單元地址——“指針加1”中的1的大小是取決於pa的類型int的,指針類型決定指針跨內存單元的步長。
 
>> pa+1 等於是指向第5個內存單元——a[1]的第一個內存單元。
 

























  

發佈了40 篇原創文章 · 獲贊 11 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章