本文目錄一覽:
求C語言教程
我給你電子文檔筆記吧~~
複製來的….
第一章 概述
1. C語言的特點
①語言簡潔、緊湊,使用方便、靈活。共有32個關鍵字,9種控制語句。
②運算符豐富,公有34種運算符。
③數據結構豐富,數據類型有:整型、實型、字符型、數組、指針、結構體、共用體等。
④具有結構化的控制語句(如if…else、while、do…while、switch、for)
⑤語法限制不太嚴格,程序設計自由度大。
⑥允許直接訪問物理地址,能進行位(bit)操作,可以直接對硬件操作。
⑦生成目標代碼質量高,程序執行效率高。
⑧可移植性好。
2. C語言的用途
C雖不擅長科學計算和管理領域,但對操作系統和系統實用程序以及對硬件進行操作方面,C有明顯的優勢。現在很多大型應用軟件也用C編寫。
Top of Page
第二章 數據類型、運算符與表達式
1. C的數據類型
C的數據類型包括:整型、字符型、實型或浮點型(單精度和雙精度)、枚舉類型、數組類型、結構體類型、共用體類型、指針類型和空類型。
2. 常量與變量
常量其值不可改變,符號常量名通常用大寫。變量其值可以改變,變量名只能由字母、數字和下劃線組成,且第一個字符必須為字母或下劃線。否則為不合法的變量名。變量在編譯時為其分配相應存儲單元。
3. 整型數據
整型常量的表示方法:十進制不用說了,八進制以0開頭,如0123,十六進制以0x開頭,如0x1e。
整型變量分為:基本型(int)、短整型(short int)、長整型(long int)和無符號型。不同機器上各類數據所佔內存字節數不同,一般int型為2個字節,long型為4個字節。
4. 實型數據
實型常量表示形式:十進制形式由數字和小數點組成(必須有小數點),如:0.12、.123、123
0.0等。指數形式如123e3代表123×10的三次方。
實型變量分為單精度(float)和雙精度(double)兩類。在一般系統中float型佔4字節,7位有效數字,double型佔8字節,15~16位有效數字。
5. 字符型數據
字符變量用單引號括起來,如’a’,’b’等。還有一些是特殊的字符常量,如’\n’,’\t’等。分別代表換行和橫向跳格。
字符變量以char 來定義,一個變量只能存放一個字符常量。
字符串常量是由雙引號括起來的字符序列。這裡一定要注意’a’和”a”的不同,前者為字符常量,後者為字符串常量,c規定:每個字符串的結尾加一個結束標誌”,實際上”a”包含兩個字符:’a’和”。
6. 數值型數據間的混合運算
整型、字符型、實型數據間可以混合運算,運算時不同類型數據要轉換成同一類型再運算,轉換規則:
char,short – int – unsigned – long – double – float
7. 運算符和表達式
c運算符包括:
算數運算符( + – * / % )
關係運算符( == = = != )
邏輯運算符( ! || )
位運算符( ~ | ^ )
賦值運算符( = )
條件運算符( ? : )
逗號運算符( , )
指針運算符( * )
求字節數( sizeof )
強制類型轉換(類型)
分量運算符( . – )
下標運算符( [ ] )
其它運算符( 如函數調用運算符( ) )
自增自減運算符( ++ — )注意:++i和i++的不同之處,++i使用i之前先使i加1,i++使用i之後,使i加1。
逗號表達式的求解過程:先求解表達式1,再求解表達式2,整個表達式的值是表達式2的值。
Top of Page
第三章 最簡單的c程序設計
1.c的9種控制語句:
if() ~ else~
for()~
while()~
do~while()
continue
break
switch
goto
return
程序的三種基本結構:順序結構,選擇結構,循環結構
2.數據輸出
c語言不提供輸入輸出語句,輸入輸出操作是由c的庫函數完成。但要包含頭文件stdio.h。
putchar( ) 向終端輸出一個字符
printf( )的格式字符:
① d格式符 用來輸出十進制整數
%d 按整型數據的實際長度輸出
%md 使輸出長度為m,如果數據長度小於m,則左補空格,如果大於m,則輸出實際長度
%ld 輸出長整型數據
② o格式符 以八進制形式輸出整數
③ x格式符 以十六進制形式輸出整數
④ u格式符 用來輸出unsigned型數據,以十進制形式輸出
⑤ c格式符 用來輸出一個字符
⑥ s格式符 輸出一個字符串
%s 輸出實際長度字符串
%ms 輸出的串佔m列,如果串長度小於m,左補空格,如果大於m,實際輸出
%-ms輸出的串佔m列,如果串長度小於m,右補空格,
%m.ns 輸出佔m列,但只取字符串中左端n個字符並靠右對齊
%-m.ns m、n含義同上,靠左對齊,如果nm,則m自動取n值
⑦ f格式符 以小數形式輸出實數
%f 整數部分全部輸出,小數部分輸出6位
%m.nf 輸出數據共佔m列,其中有n位小數。如果數值長度小於m,左補空格
%-m.nf 同上,右補空格
⑧ e格式符 以指數形式輸出實數
%e 系統指定6位小數,5位指數(e+002 )
⑨ g格式符 輸出實數,根據數值大小,自動選f格式或e格式
3.數據輸入
getchar( ) 從終端輸入一個字符
scanf( 格式控制,地址列表) 標準C scanf中不使用%u,對於unsigned型數據,以%d或%o或%x輸入。%後的*,用來跳過它相應的數據。輸入數據時不能規定精度如scanf( “%7.2f”, a );是不合法的。
Top of Page
第四章 邏輯運算和判斷選取控制
1. 關係運算符:
c提供6種關係運算符( = = == != )前四種優先級高於後兩種。
2. If語句
C提供了三種形式的if語句
If(表達式) 語句
If(表達式) 語句1 else 語句2
If(表達式1) 語句1
Else if(表達式2) 語句2
…
else 語句n
3. 條件運算符
(ab)?a:b 條件為真,表達式取值a,否則取值b
4. Switch語句
Switch(表達式)
{
case 常量表達式1:語句1; break;
case 常量表達式2:語句2; break;
…
case 常量表達式n:語句n; break;
default :語句n+1;
}
Top of Page
第五章 循環控制
1. 幾種循環語句
goto語句(現已很少使用)
while語句 先判斷表達式後執行語句
do-while語句 先執行語句後判斷表達式
for語句
2. Break語句和continue語句
Break語句用於跳出循環,continue用於結束本次循環。
Top of Page
第六章 數組
1. 一維數組
c規定只有靜態存儲(static)和外部存儲(extern)數組才能初始化。給數組初始化時可以不指定數組長度。
2. 二維數組
3. 字符數組
部分字符串處理函數
puts(字符數組) 將一個字符串輸出到終端。
gets(字符數組) 從終端輸入一個字符串到字符數組,並且得到一個函數值,為該字符數組的首地址
strcat(字符數組1,字符數組2) 連接兩個字符數組中的字符串,數組1必須足夠大。
Strcpy(字符數組1,字符串2) 將字符串2拷貝到字符數組1中。
Strcmp(字符串1,字符串2) 比較字符串,相等返回0,字符串1字符串2,返回正數,小於返回負數。
Strlen(字符數組) 求字符串長度。
Strlwr( 字符串) 將字符串中的大寫字母轉換成小寫
Strupr( 字符串) 將字符串中的小寫字母轉換成大寫
以上是一些比較常用的字符串處理函數。
Top of Page
第七章 函數
1. 關於形參和實參的說明
① 在函數被調用之前,形參不佔內存
② 實參可以是常量、變量或表達式
③ 必須指定形參的類型
④ 實參與形參類型應一致
⑤ 實參對形參的數據傳遞是”值傳遞”,即單向傳遞
2. 函數返回值
如果想讓函數返回一個值,在函數中就要用return語句來獲得,在定義函數時也要對函數值指定類型,如果不指定,默認返回整型。
3. 函數調用
1)注意在函數調用時實參和形參的個數、類型應一一對應。對實參表求值的順序是不確定的,有的系統按自左至右,有的系統則按自右至左的順序。這一點要注意。
2)函數調用的方式:函數語句,函數表達式,函數參數
3)如果主調函數和被調函數在同一文件中,並且主調函數在前,那麼一般要在主調函數中對被調函數進行說明。除非:(1)被調函數的返回值類型為整型或字符型(2)被調函數出現在主調函數之前。
4)對函數的說明和定義是不同的,定義是指對函數功能的確立,包括指定函數名,函數值類型,形參及其類型、函數體等。說明則只是對已定義的函數返回值類型進行說明,只包括函數名、函數類型以及一個空的括弧,不包括形參和函數體。
5)c語言允許函數的遞歸調用(在調用一個函數的過程中又出現直接或間接的調用該函數本身)。
4. 數組作為函數參數
1)數組元素作為函數參數 和一般變量相同
2)數組名作參數應該在主調和被調函數分別定義數組,形參數組的大小可以不定義。注意:數組名作參數,不是單向傳遞。
3)多維數組作參數,在被調函數中對形參數組定義時可以省略第一維的大小說明,但不能省略第二維或更高維的說明。
5. 局部變量和全局變量
從變量作用域角度分,變量可分為局部變量和全局變量。
1)內部變量(局部變量)
在一個函數內定義,只在函數範圍內有效的變量。
2)外部變量(全局變量)
在函數外定義,可以為本文件其它函數所共用,有效範圍從定義變量的位置開始
到本文件結束。建議盡量少使用全局變量,因為它在程序全部執行過程中都佔用
資源,而且使函數的通用性降低了。如果在定義外部變量之前的函數要想使用該
外部變量,則應在該函數中用extern作外部變量說明。
6. 動態存儲變量與靜態存儲變量
從變量值存在的時間(生存期)角度來分,可分為靜態存儲變量和動態存儲變量。靜態存儲指在程序運行期間給變量分配固定的存儲空間,動態存儲指程序運行期間根據需要動態的給變量分配存儲空間。
C語言中,變量的存儲方法分為兩大類:靜態存儲類和動態存儲類,具體包括:自動的(auto),靜態的(static),寄存器的(register),外部的(extern)。
1) 局部變量的存儲方式
函數中的局部變量如不作專門說明,都之auto的,即動態存儲的,auto可以省略。局部變量也可以定義為static的,這時它在函數內值是不變的。靜態局部變量如不賦初值,編譯時系統自動賦值為0,動態局部變量如不賦初值,則它的值是個不確定的值。C規定,只有在定義全局變量和局部靜態變量時才能對數組賦初值。為提高執行效率,c允許將局部變量值放在寄存器中,這種變量叫register變量,要用register說明。但只有局部動態變量和形式參數可以作為register變量,其它不行。
2) 全局變量的存儲方式
全局變量在函數外部定義,編譯時分配在靜態存儲區,可以在程序中各個函數所引用。多個文件的情況如何引用全局變量呢?假如在一個文件定義全局變量,在別的文件引用,就要在此文件中用extern對全局變量說明,但如果全局變量定義時用static的話,此全局變量就只能在本文件中引用了,而不能被其它文件引用。
3) 存儲類別小結
從作用域角度分,有局部變量和全局變量
局部變量:自動變量,即動態局部變量(離開函數,值就消失)
靜態局部變量(離開函數,值仍保留)
寄存器變量(離開函數,值就消失)
(形參可定義為自動變量和寄存器變量)
全局變量:靜態全局變量(只限本文件引用)
全局變量(允許其它文件引用)
從存在的時間分,有靜態存儲和動態存儲
動態存儲:自動變量(本函數內有效)
寄存器變量(本函數內有效)
形參
靜態存儲:靜態局部變量(函數內有效)
靜態全局變量(本文件內有效)
全局變量(其它文件可引用)
從變量值存放的位置分
靜態存儲區:靜態局部變量
靜態全局變量
全局變量
動態存儲區:自動變量和形參
寄存器內:寄存器變量
7. 內部函數和外部函數
內部函數:只能被本文件中的其它函數調用,定義時前加static,內部函數又稱靜態函數。
外部函數:可以被其它文件調用,定義時前加extern,如果省略,則隱含為外部函數,在需要調用此函數的文件中,一般要用extern說明。
Top of Page
第八章 預編譯處理
c編譯系統在對程序進行通常的編譯之前,先進行預處理。c提供的預處理功能主要有以下三種:1)宏定義 2)文件包含 3)條件編譯
1. 宏定義
不帶參數的宏定義
用一個指定的標識符來代表一個字符串,形式:#define 標識符 字符串
幾點說明:
1) 宏名一般用大寫
2) 宏定義不作語法檢查,只有在編譯被宏展開後的源程序時才會報錯
3) 宏定義不是c語句,不在行末加分號
4) 宏名有效範圍為定義到本源文件結束
5) 可以用#undef命令終止宏定義的作用域
6) 在宏定義時,可以引用已定義的宏名
帶參數的宏定義
定義形式:#define 宏名(參數表) 字符串
這和函數有些類似,但他們是不同的:
1) 函數調用時,先求實參表達式值,再代入形參,而宏只是簡單替換,並不求值
2) 函數調用是在程序運行時分配內存的,而宏展開時並不分配內存,也沒有返回值的概念
3) 對函數中的實參和形參都要定義類型,而且要求一致,宏名無類型,其參數也沒有類型。
4) 函數只有一個返回值,而宏可以得到幾個結果
5) 宏替換不佔運行時間,只佔編譯時間,而函數調用占運行時間
2. 文件包含處理
#include “文件1” 就是將文件1的全部內容複製插入到#include位置,作為一個源文件進行編譯。
在#include命令中,文件名可以用” “也可以用 ,假如現在file1.c中包含file2.h文件,” “表示系統先在file1.c所在目錄中找file2.h,如果找不到,再按系統指定的標準方式檢索目錄, 表示系統直接按指定的標準方式檢索目錄。所以用” “保險一點。
3. 條件編譯
條件編譯指不對整個程序都編譯,而是編譯滿足條件的那部分。條件編譯有以下幾種形式:
1)#ifdef 標識符
程序段1
#else
程序段2
#endif
它的作用:當標識符在前面已經被定義過(一般用#define),則對程序段1編譯,否則對程序段2編譯。
2)#ifndef 標識符
程序段1
#else
程序段2
#endif
它的作用和#ifdef相反,當標識符沒被定義過,對程序段1編譯,否則對程序段2編譯。
3)#if 表達式
程序段1
#else
程序段2
#endif
它的作用:當表達式值為真(非0)時,對程序段1編譯,否則對程序段2編譯。
Top of Page
第九章 指針
指針說白了就是地址。指針變量就是用來存放指針(地址)的變量。
1. 變量的指針和指向變量的指針變量
讀起來很拗口,說白了就是變量的地址和用來存放變量地址的地址變量。因為一個變量在編譯的時候系統要為它分配一個地址,假如再用一個變量來存放這個地址,那麼這個變量就叫做指向變量的指針變量,也就是用來存放變量地址的這麼一個變量。所謂”指向”就是指存放××的地址,如指向變量的指針變量,”指向”就是指用來存放變量的地址,再如指向數組的指針變量,”指向”就是指存放數組的地址。只要理解了這個,指針也就不難了。另外,還有指向字符串的指針變量,指向函數的指針變量,指向指針的指針變量等。
1) 指針變量的定義
形式:類型標識符 *標識符 如:int *pointer;
要注意兩點:*表示pointer是個指針變量,在用這個變量的時候不能寫成*pointer, *pointer是pointer指向的變量。一個指針變量只能指向同一個類型的變量。如上面
pointer只能指向int型變量。
2)指針變量的引用
兩個有關的運算符:
取地址運算符 a 就代表變量a的地址
* 指針運算符 *a 就代表變量a的值
2. 數組的指針和指向數組的指針變量
數組的指針指數組的起始地址,數組元素的指針指數組元素的地址。
1)指向數組元素的指針變量的定義與賦值
定義和指向變量的指針變量定義相同,c規定數組名代表數組的首地址,即第一個數組元素地址。
2)通過指針引用數組元素
我們通常引用數組元素的形式是a[i],如果用指針可以這樣引用,*(a+i),或定義一個指針變量p,將數組a的首地址賦給p,p=a;然後用*(p+i)引用。
注意:指針變量p指向數組a首地址,則p++指向數組a的下一元素地址,即a[1]的地址。
3)數組名作函數參數
形參數組和實參數組之間並不是值傳遞,而是共用同一段地址,所以在函數調用過程中如果形參的值發生變化,則實參的值也跟着變化。
4)指向多維數組的指針和指針變量
以二維數組為居多。假設定義了一個二維數組a[3][4],那麼
a代表整個二維數組的首地址,也代表第0行的首地址,同時也是第0行第0列的元素的首地址。a +0和a[0]代表第0行首地址,a+1和a[1]代表第一行的首地址。
假設a是一個數組的首地址,那麼如果a是一維的,a+I代表第I個元素的地址,如果a是二維的,則a+I代表第I行的首地址。
那麼第一行第二列的元素地址如何表示呢?a[1]+2或a[1][2]或*(a+1)+2。
我們只要記住:在二維數組中a代表整個數組的首地址,a[I]代表第I行的首地址,a[I]與*(a+I)等價就行了。只要運用熟練了就沒什麼複雜的了。
5)指向由m個整數組成的一維數組的指針變量
如:int (*p)[4],p是一個指向包含4個元素的一維數組,如果p先指向a[0],則p+1指向a[1],即p的增值是以一維數組的長度為單位的,這裡是4,舉個例子:
假設a[3][4]=,p先指向a[0]也就是數組a的首地址,那麼p+1就是a[1]的首地址即元素9的地址,因為在定義p時int (*p)[4],定義一維數組長度為4,所以p+1就等於加了一個一維數組的長度4。
3. 字符串的指針和指向字符串的指針變量
1)字符串的表示形式
c中字符串有兩種表示形式:一種是數組,一種是字符指針
char string[]=”I love c!”;
char *str=”I love c!”;
其實指針形式也是在內存中開闢了一個數組,只不過數組的首地址存放在字符指針變量str中,千萬不要認為str是一個字符串變量。
2)字符串指針作函數參數
實際上字符串指針就是數組的首地址。
3)字符指針變量與字符數組的區別
① 字符數組由若干元素組成,每個元素存放一個字符,而字符指針變量只存放字符串的首地址,不是整個字符串
② 對數組初始化要用static,對指針變量不用。
③ 對字符數組賦值,只能對各個元素賦值,不能象下面這樣:
char str[14];
str=”I love c!”;
對指針變量可以,
char *str;
str=”I love c!”;
注意:此時賦給str的不是字符,而是字符串首地址。
④ 數組在定義和編譯時分配內存單元,而指針變量定義後最好將其初始化,否則指針變量的值會指向一個不確定的數.
嘎嘎。。。就這麼多啦~~
c語言指針簡單教程
指針是C語言中廣泛使用的一種數據類型。 運用指針編程是C語言最主要的風格之一。利用指針變量可以表示各種數據結構; 能很方便地使用數組和字符串; 並能象彙編語言一樣處理內存地址,從而編出精練而高效的程序。指針極大地豐富了C語言的功能。 學習指針是學習C語言中最重要的一環, 能否正確理解和使用指針是我們是否掌握C語言的一個標誌。同時, 指針也是C語言中最為困難的一部分,在學習中除了要正確理解基本概念,還必須要多編程,上機調試。只要作到這些,指針也是不難掌握的。
指針的基本概念 在計算機中,所有的數據都是存放在存儲器中的。 一般把存儲器中的一個字節稱為一個內存單元, 不同的數據類型所佔用的內存單元數不等,如整型量佔2個單元,字符量佔1個單元等, 在第二章中已有詳細的介紹。為了正確地訪問這些內存單元, 必須為每個內存單元編上號。 根據一個內存單元的編號即可準確地找到該內存單元。內存單元的編號也叫做地址。 既然根據內存單元的編號或地址就可以找到所需的內存單元,所以通常也把這個地址稱為指針。 內存單元的指針和內存單元的內容是兩個不同的概念。 可以用一個通俗的例子來說明它們之間的關係。我們到銀行去存取款時, 銀行工作人員將根據我們的帳號去找我們的存款單, 找到之後在存單上寫入存款、取款的金額。在這裡,帳號就是存單的指針, 存款數是存單的內容。對於一個內存單元來說,單元的地址即為指針, 其中存放的數據才是該單元的內容。在C語言中, 允許用一個變量來存放指針,這種變量稱為指針變量。因此, 一個指針變量的值就是某個內存單元的地址或稱為某內存單元的指針。圖中,設有字符變量C,其內容為“K”(ASCII碼為十進制數 75),C佔用了011A號單元(地址用十六進數表示)。設有指針變量P,內容為011A, 這種情況我們稱為P指向變量C,或說P是指向變量C的指針。 嚴格地說,一個指針是一個地址, 是一個常量。而一個指針變量卻可以被賦予不同的指針值,是變。 但在常把指針變量簡稱為指針。為了避免混淆,我們中約定:“指針”是指地址, 是常量,“指針變量”是指取值為地址的變量。 定義指針的目的是為了通過指針去訪問內存單元。
既然指針變量的值是一個地址, 那麼這個地址不僅可以是變量的地址, 也可以是其它數據結構的地址。在一個指針變量中存放一
個數組或一個函數的首地址有何意義呢? 因為數組或函數都是連續存放的。通過訪問指針變量取得了數組或函數的首地址, 也就找到了該數組或函數。這樣一來, 凡是出現數組,函數的地方都可以用一個指針變量來表示, 只要該指針變量中賦予數組或函數的首地址即可。這樣做, 將會使程序的概念十分清楚,程序本身也精練,高效。在C語言中, 一種數據類型或數據結構往往都佔有一組連續的內存單元。 用“地址”這個概念並不能很好地描述一種數據類型或數據結構, 而“指針”雖然實際上也是一個地址,但它卻是一個數據結構的首地址, 它是“指向”一個數據結構的,因而概念更為清楚,表示更為明確。 這也是引入“指針”概念的一個重要原因。
指針變量的類型說明
對指針變量的類型說明包括三個內容:
(1)指針類型說明,即定義變量為一個指針變量;
(2)指針變量名;
(3)變量值(指針)所指向的變量的數據類型。
其一般形式為: 類型說明符 *變量名;
其中,*表示這是一個指針變量,變量名即為定義的指針變量名,類型說明符表示本指針變量所指向的變量的數據類型。
例如: int *p1;表示p1是一個指針變量,它的值是某個整型變量的地址。 或者說p1指向一個整型變量。至於p1究竟指向哪一個整型變量, 應由向p1賦予的地址來決定。
再如:
staic int *p2; /*p2是指向靜態整型變量的指針變量*/
float *p3; /*p3是指向浮點變量的指針變量*/
char *p4; /*p4是指向字符變量的指針變量*/ 應該注意的是,一個指針變量只能指向同類型的變量,如P3 只能指向浮點變量,不能時而指向一個浮點變量, 時而又指向一個字符變量。
指針變量的賦值
指針變量同普通變量一樣,使用之前不僅要定義說明, 而且必須賦予具體的值。未經賦值的指針變量不能使用, 否則將造成系統混亂,甚至死機。指針變量的賦值只能賦予地址, 決不能賦予任何其它數據,否則將引起錯誤。在C語言中, 變量的地址是由編譯系統分配的,對用戶完全透明,用戶不知道變量的具體地址。 C語言中提供了地址運算符來表示變量的地址。其一般形式為: 變量名; 如a變示變量a的地址,b表示變量b的地址。 變量本身必須預先說明。設有指向整型變量的指針變量p,如要把整型變量a 的地址賦予p可以有以下兩種方式:
(1)指針變量初始化的方法 int a;
int *p=a;
(2)賦值語句的方法 int a;
int *p;
p=a;
不允許把一個數賦予指針變量,故下面的賦值是錯誤的: int *p;p=1000; 被賦值的指針變量前不能再加“*”說明符,如寫為*p=a 也是錯誤的
指針變量的運算
指針變量可以進行某些運算,但其運算的種類是有限的。 它只能進行賦值運算和部分算術運算及關係運算。
1.指針運算符
(1)取地址運算符
取地址運算符是單目運算符,其結合性為自右至左,其功能是取變量的地址。在scanf函數及前面介紹指針變量賦值中,我們已經了解並使用了運算符。
(2)取內容運算符*
取內容運算符*是單目運算符,其結合性為自右至左,用來表示指針變量所指的變量。在*運算符之後跟的變量必須是指針變量。需要注意的是指針運算符*和指針變量說明中的指針說明符* 不是一回事。在指針變量說明中,“*”是類型說明符,表示其後的變量是指針類型。而表達式中出現的“*”則是一個運算符用以表示指針變量所指的變量。
main(){
int a=5,*p=a;
printf (“%d”,*p);
}
……
表示指針變量p取得了整型變量a的地址。本語句表示輸出變量a的值。
2.指針變量的運算
(1)賦值運算
指針變量的賦值運算有以下幾種形式:
①指針變量初始化賦值,前面已作介紹。
②把一個變量的地址賦予指向相同數據類型的指針變量。例如:
int a,*pa;
pa=a; /*把整型變量a的地址賦予整型指針變量pa*/
③把一個指針變量的值賦予指向相同類型變量的另一個指針變量。如:
int a,*pa=a,*pb;
pb=pa; /*把a的地址賦予指針變量pb*/
由於pa,pb均為指向整型變量的指針變量,因此可以相互賦值。
④把數組的首地址賦予指向數組的指針變量。
例如: int a[5],*pa;
pa=a; (數組名表示數組的首地址,故可賦予指向數組的指針變量pa)
也可寫為:
pa=a[0]; /*數組第一個元素的地址也是整個數組的首地址,
也可賦予pa*/
當然也可採取初始化賦值的方法:
int a[5],*pa=a;
⑤把字符串的首地址賦予指向字符類型的指針變量。例如: char *pc;pc=”c language”;或用初始化賦值的方法寫為: char *pc=”C Language”; 這裡應說明的是並不是把整個字符串裝入指針變量, 而是把存放該字符串的字符數組的首地址裝入指針變量。 在後面還將詳細介紹。
⑥把函數的入口地址賦予指向函數的指針變量。例如: int (*pf)();pf=f; /*f為函數名*/
(2)加減算術運算
對於指向數組的指針變量,可以加上或減去一個整數n。設pa是指向數組a的指針變量,則pa+n,pa-n,pa++,++pa,pa–,–pa 運算都是合法的。指針變量加或減一個整數n的意義是把指針指向的當前位置(指向某數組元素)向前或向後移動n個位置。應該注意,數組指針變量向前或向後移動一個位置和地址加1或減1 在概念上是不同的。因為數組可以有不同的類型, 各種類型的數組元素所佔的字節長度是不同的。如指針變量加1,即向後移動1 個位置表示指針變量指向下一個數據元素的首地址。而不是在原地址基礎上加1。
例如:
int a[5],*pa;
pa=a; /*pa指向數組a,也是指向a[0]*/
pa=pa+2; /*pa指向a[2],即pa的值為pa[2]*/ 指針變量的加減運算只能對數組指針變量進行, 對指向其它類型變量的指針變量作加減運算是毫無意義的。(3)兩個指針變量之間的運算只有指向同一數組的兩個指針變量之間才能進行運算, 否則運算毫無意義。
①兩指針變量相減
兩指針變量相減所得之差是兩個指針所指數組元素之間相差的元素個數。實際上是兩個指針值(地址) 相減之差再除以該數組元素的長度(字節數)。例如pf1和pf2 是指向同一浮點數組的兩個指針變量,設pf1的值為2010H,pf2的值為2000H,而浮點數組每個元素佔4個字節,所以pf1-pf2的結果為(2000H-2010H)/4=4,表示pf1和 pf2之間相差4個元素。兩個指針變量不能進行加法運算。 例如, pf1+pf2是什麼意思呢?毫無實際意義。
②兩指針變量進行關係運算
指向同一數組的兩指針變量進行關係運算可表示它們所指數組元素之間的關係。例如:
pf1==pf2表示pf1和pf2指向同一數組元素
pf1pf2表示pf1處於高地址位置
pf1pf2表示pf2處於低地址位置
main(){
int a=10,b=20,s,t,*pa,*pb;
pa=a;
pb=b;
s=*pa+*pb;
t=*pa**pb;
printf(“a=%d\nb=%d\na+b=%d\na*b=%d\n”,a,b,a+b,a*b);
printf(“s=%d\nt=%d\n”,s,t);
}
……
說明pa,pb為整型指針變量
給指針變量pa賦值,pa指向變量a。
給指針變量pb賦值,pb指向變量b。
本行的意義是求a+b之和,(*pa就是a,*pb就是b)。
本行是求a*b之積。
輸出結果。
輸出結果。
……
指針變量還可以與0比較。設p為指針變量,則p==0表明p是空指針,它不指向任何變量;p!=0表示p不是空指針。空指針是由對指針變量賦予0值而得到的。例如: #define NULL 0 int *p=NULL; 對指針變量賦0值和不賦值是不同的。指針變量未賦值時,可以是任意值,是不能使用的。否則將造成意外錯誤。而指針變量賦0值後,則可以使用,只是它不指向具體的變量而已。
main(){
int a,b,c,*pmax,*pmin;
printf(“input three numbers:\n”);
scanf(“%d%d%d”,a,b,c);
if(ab){
pmax=a;
pmin=b;}
else{
pmax=b;
pmin=a;}
if(c*pmax) pmax=c;
if(c*pmin) pmin=c;
printf(“max=%d\nmin=%d\n”,*pmax,*pmin);
}
……
pmax,pmin為整型指針變量。
輸入提示。
輸入三個數字。
如果第一個數字大於第二個數字...
指針變量賦值
指針變量賦值
指針變量賦值
指針變量賦值
判斷並賦值
判斷並賦值
輸出結果
……
求C語言教程和JAVA教程
資料內容所涉及方面:
C/C++/VC++的基礎教程、通訊、協議分析、遊戲開發、圖像處理、管理系統、多媒體、加密與解密、控件ACTIVEX、開發CGI、標準程式庫、技術內幕、Windows核心編程、對象模型、人工智能、軟件工程、數據結構、WindowsAPI、Visual Basic 、Directx、網絡開發、數據庫開發、ADO、神經網絡、DLL和內存管理、OLEDDE、操作系統、端口、數值算法、等等技術或相關開發資料。
《C語言專區》
C語言實例教程 1.72
經典編程900例(C語言)
C語言實例教程
C語言圖象處理方法
C語言編程實例
C語言書打包下載
集成學習環境(C語言)
C語言聖經 1.0
用C實現面向對象
C語言高級實用編程技巧
C語言最新編程技巧200例
C語言速成3.0
C語言編程技巧程序集
C語言速成多媒件課件 3.0
C語言多媒體教程
C程序設計培訓
實用C語言詳解
C語言程序設計及應用實例
C語言程序寶典
C語言教程
《C語言編程寶典》
C語言常用函數手冊
C語言學習系統
C語言技術文章
C常用算法程序集
微軟C編程精粹
《C++語言專區》
Inside C++ Object Model
C++ 入門基礎教程
C++和面向對象的數值計算
經典C++語言教程
C++編程實例詳解
C_C++深層探索
C_C++程序設計
C++輸入輸出流及本地化
經典 C++語言教程
C++ Primer 3rd Edition
C++_Primer_Plus_4th
C++應用編程200例
C++面向對象高效編程
Borland C++ 3.0自學培訓教程
經典 C++ 語言教程
C++Builder自學培訓教程
Borland C++ Builder高級編程
高質量C_C++編程指南
C++程序設計培訓教程
C++程序設計教程
C++Builder核心program
C++Builder基礎進階
C++Builder30開發指南
創世紀的C++ Builder教程
21天學會C++
C++程序調試實用手冊
C++Builder學習大全中文版
CC++深層探索
C++ 設計新思維
經典C++圖書下載 1
經典C++圖書下載 2
C++ 常見問題問與答
C++ 和面向對象的數值計算
C++ 面向對象多線程編程
嵌入式系統中C的開發
用 C++ 開發 Web 商用程序
C++名家對話
C++實踐之路
C++bulider參考手冊 1.1
用C++開發Web商用程序
C++代碼設計與重用
C++程序設計講義
《C#語言專區》
C# Primer Plus中文版
C# 開發編碼規範
C#深入淺出全接觸
C# COM+ Programming
Design Pattern In C#
C#實現的俄羅斯方塊程序
C#高級編程第2版
C#百例
C#.NET 開發者手冊
CSharp程序員參考手冊
C#程序100實例
新一代C#與ASP.NET權威指南
C#與.NET技術平台實演練
C#程序員參考手冊
C# Network Programming
C#入門經典
ASP.NET C#教程
C#.NET中文版Web服務開發基礎
精通C#與ASP.NET程序設計
C#文檔中文版(微軟)
C#教程
C#高級編程
C#進階手冊
MS Press Inside C#
C#實例程序
Windows應用高級編程-C#編程篇
C#與.NET技術平台實戰演練
C#語言參考
C#.NET編程培訓教程
C# WINDOWS程序設計
C#系列教程
C#英文手冊
精通C#簡體中文版
C# 參考手冊
C#語言規範
C# 程序員介紹
C# 程序員參考手冊
C#–微軟.NET的第一語言
C#基本書寫規範技術文檔
《VC++語言專區》
VC++與Matlab混合編程的快速實現
VC++編程指南
VC++6編程方法
VC++6.0 類庫參考手冊
VC++database編程大全
VC++6.0培訓教程
VC++編程技巧與範例
VC++網絡教程
VC++面向對象入門
VC++擴展編程實例
用VC++編寫USB接口通信程序
VC++6.0 語言參考手冊
VC++6.0內幕
VC++6.0 運行庫參考手冊
VC++5.0易學活用
VC++6.0 用戶界面製作技術與應用實例
Visual C++6.0從入門到精通
Visual C++ 6.0 教程
Visual C++ 6.0 開發寶典
Visual C++ 6.0實例
VISUAL C++擴展編程實例
Visual C++6.0高級編程技巧與實例
Visual C++ 6.0用戶開發手冊
瘋狂VC技巧集
VC模板庫手冊
用VC開發Activex
用VC開發CGI
用VC開發win應用
VC通訊
VC入門教程
VC實例
VC使用大全
VC5.0開發人員參考手冊
跟我學 VISUAL C++ 6.0
精通Visual C++圖像編程
Visual C++.NET應用編程150例
Visual C++ 6.0 高級編程
Visual C++ 6—24學時學習教程
Visual C++高級編程技巧與實例
Visual C++ 設計WIN32應用程序
Visual C++ 6.0 編程實例與技巧
Visual C++ 6.0 程序員指南
Visual C++ 6-24學時學習教程
Visual C++ – Visual C++
Visual C++ .net多媒體教學
VC編程經驗總結
VC新手學堂
VC6.0 MFC類庫參考手冊
VC6.0 運行庫參考手冊
VC-MFC編程實例
VC-MFC擴展編程實例
深入VC編程內幕
Visual C.NET中文版Web服務開發基礎
然後還有個C語言百度吧:
參考資料:
C語言簡單例子
1 c語言是面向過程的語言,可以理解為一個函數調用另一個函數的語言,其中程序的入口是main函數
2 示例
#includestdio.h //包含要用到的函數的頭文件,如printf
int max(int a, int b);//函數聲明
int main(){//程序入口函數
int a = 12, b = 9;
int m = max(a, b);//函數調用
printf(“max=%d\n”, m);
getchar();
return 0;
}
int max(int a, int b){//函數定義
return a b ? a : b;
}
3 運行結果
用C語言編寫一個簡單程序,有哪些步驟,可以舉一個例子詳細講解下嗎?
//以Helloworld示例
//先使用編輯工具如windows的記事本或vc++環境,或linux的vim編輯器創建一個hello.c文件
//打開文件後,如下 步驟寫程序
#include stdio.h//首先要引入c語言的標準輸入輸出庫文件,因為這個文件里有已經定義好的可以使用的函數
//接下來需要寫一個main函數,這也是c語言程序里必不可少的一個函數,叫主函數,他是整個程序的入口函數,程序所有的功能實現都要在這個函數中體現。但是這個函數有且僅有一個
int main()
{
//這是main函數的函數體,要實現什麼功能,就把實現功能的語句寫到這裡面
//比如我要實現打印HelloWorld字符,那麼我就調用printf()標準輸出語句
printf(“Hello World!\n”);//這個語句表示原樣輸出引號內的字符,‘\n’表示換行
return 0;//最後,因為main函數有一個int的返回類型限定,那麼我們使用return語句返回一個int類型的值 0.
}
//這樣就結束了。一個簡單的但又完整的C程序就有了,
//下一步就是使用編譯器編譯成目標的可執行文件:
//如果是windows下的vc++,那麼需要分別點擊編譯,鏈接兩個按鈕生成hello.exe可執行文件
//如果是linux下直接在shell中使用gcc hello.c就可以編譯成可執行文件a.out
//最後就是運行了,windows下直接點擊vc++的運行或雙擊hello.exe可以出現dos窗口運行,並顯示結果,linux下使用“./a.out”可以直接運行,運行結果會顯示在shell中。
//這就是整個完整的流程,包括每一步。如果幫助到你,請你採納為答案。謝謝。
C語言循環控制實例教程
循環結構是程序中一種很重要的結構。其特點是,在給定條件成立時,反覆執行某程序段,直到條件不成立為止。給定的條件稱為循環條件,反覆執行的程序段稱為循環體。C語言提供了多種循環語句,可以組成各種不同形式的’循環結構:
C語言循環控制實例教程
·用goto語句和if語句構成循環;
·用while語句;
·用do-while語句;
·用for語句;
goto語句是一種無條件轉移語句,與BASIC中的goto語句相似。goto 語句的使用格式為:
goto 語句標號;
其中標號是一個有效的標識符,這個標識符加上一個“:”一起出現在函數內某處,執行goto語句後,程序將跳轉到該標號處並執行其後的語句。
另外標號必須與goto語句同處於一個函數中,但可以不在一個循環層中。通常goto語句與if條件語句連用,當滿足某一條件時,程序跳到標號處運行。
goto語句通常不用,主要因為它將使程序層次不清,且不易讀,但在多層嵌套退出時,用goto語句則比較合理。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/276722.html