C語言程序設(shè)計視頻教程第10章課件_第1頁
C語言程序設(shè)計視頻教程第10章課件_第2頁
C語言程序設(shè)計視頻教程第10章課件_第3頁
C語言程序設(shè)計視頻教程第10章課件_第4頁
C語言程序設(shè)計視頻教程第10章課件_第5頁
已閱讀5頁,還剩35頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

C程序設(shè)計Email:C語言程序設(shè)計視頻教程第10章

第10章指針 指針是C語言中的一個重要概念,也是C語言的一個重要特色。正確而靈活地運用它,可以有效地表示復(fù)雜的數(shù)據(jù)結(jié)構(gòu);能動態(tài)分配內(nèi)存;方便地使用字符串;有效而方便地使用數(shù)組;在調(diào)用函數(shù)時能獲得1個以上的結(jié)果;能直接處理內(nèi)存單元地址等,這對設(shè)計系統(tǒng)軟件是非常必要的。掌握指針的應(yīng)用,可以使程序簡潔、緊湊、高效。每一個學(xué)習(xí)和使用C語言的人,都應(yīng)當(dāng)深入地學(xué)習(xí)和掌握指針。可以說,不掌握指針就是沒有掌握C的精華。C語言程序設(shè)計視頻教程第10章10.1地址和指針的概念變量的屬性:名、值和地址變量的訪問方式:直接訪問、間接訪問變量的地址稱為該變量的“指針”指針變量是存放地址的變量C語言程序設(shè)計視頻教程第10章10.2變量的指針和指向變量的指針變量

變量的指針就是變量的地址。存放變量地址的變量是指針變量,它用來指向另一個變量。為了表示指針變量和它所指向的變量之間的聯(lián)系,在程序中用“*”符號表示“指向”。如果已定義i_pointer為指針變量,則(*i_pointer)是i_pointer所指向的變量。C語言程序設(shè)計視頻教程第10章10.2.1定義一個指針變量 C語言規(guī)定所有變量在使用前必須定義,指定其類型,并按此分配內(nèi)存單元。指針變量不同于整型變量和其他類型的變量,它是用來專門存放地址的,必須將它定義為“指針類型”。 定義指針變量的一般形式為 基類型*指針變量名;

可以用賦值語句使一個指針變量得到另一個變量的地址,從而使它指向一個該變量。C語言程序設(shè)計視頻教程第10章在定義指針變量時要注意兩點:(1)指針變量前面的“*”表示該變量的類型為指針型變量(2)在定義指針變量時必須指定基類型C語言程序設(shè)計視頻教程第10章10.2.2指針變量的引用

指針變量中只能存放地址(指針),不要將一個整數(shù)(或其他非地址類型的數(shù)據(jù))賦給一個指針變量。 有兩個有關(guān)的運算符:

(1)&:取地址運算符

(2)*:指針運算符(或稱“間接訪問”運算符),取其指向的內(nèi)容。C語言程序設(shè)計視頻教程第10章[例10.1]通過指針變量訪問整型變量#include<stdio.h>voidmain(){inta,b;int*pointer_1,*pointer_2;a=100;b=10;pointer_1=&a;pointer_2=&b;printf(“%d,%d\n”,a,b);printf(“%d,%d\n”,*pointer_1,*pointer_2);}C語言程序設(shè)計視頻教程第10章對“&”和“*”運算符再作說明:

如果已執(zhí)行了語句

pointer_1=&a; (1)&*pointer_1 (2)*&a (3)(*pointer_1)++C語言程序設(shè)計視頻教程第10章[例10.2]輸入a和b兩個整數(shù),按先大后小的順序輸出a和b#include<stdio.h>voidmain(){int*p1,*p2,*p,a,b;scanf(“%d,%d”,&a,&b);p1=&a;p2=&b;if(a<b){ p1=&b; p2=&a;}printf(“a=%d,b=%d\n\n”,a,b);printf(“max=%d,min=%d\n”,*p1,*p2);}C語言程序設(shè)計視頻教程第10章10.2.3指針變量作為函數(shù)參數(shù)

函數(shù)的參數(shù)不僅可以是整型、浮點型、字符型等數(shù)據(jù),還可以是指針類型。它的作用是將一個變量的地址傳送到另一個函數(shù)中。C語言程序設(shè)計視頻教程第10章[例10.3]題目要求同例10.2,即對輸入的兩個整數(shù)按大小順序輸出#include<stdio.h>voidmain(){ voids*p1,int*p2); inta,b; int*pointer_1,*pointer_2; scanf(“%d,%d”,&a,&b); pointer_1=&a;

pointer_2=&b; if(a<b) s,pointer_2); printf(“\n%d,%d\n”,a,b);}voids*p1,int*p2){ inttemp; temp=*p1; *p1=*p2; *p2=temp;}C語言程序設(shè)計視頻教程第10章[例10.4]輸入a、b、c這3個整數(shù),按大小順序輸出voidmain(){inta,b,c,*p1,*p2,*p3;scanf(“%d,%d,%d”,&a,&b,&c);p1=&a;p2=&b;pe=&c;exchange(p1,p2,p3);printf(“\n%d,%d,%d\n”,a,b,c);}voidexchange(int*q1,int*q2,int*q3){if(*q1<*q2)s);if(*q1<*q3)s);if(*q2<*q3)s);}voids*pt1,int*pt2){inttemp;temp=*pt1;*pt1=*pt2;*pt2=temp;}C語言程序設(shè)計視頻教程第10章10.3數(shù)組與指針

一個變量有地址,一個數(shù)組包含若干元素,每個數(shù)組元素都在內(nèi)存中占用存儲單元,它們都有相應(yīng)的地址。指針變量既然可以指向變量,當(dāng)然也可以指向數(shù)組元素(把某一元素的地址放到一個指針變量中)。所謂數(shù)組元素的指針就是數(shù)組元素的地址。 引用數(shù)組元素可以用下標(biāo)法(如a[3]),也可以用指針法,即通過指向數(shù)組元素的指針找到所需的元素。使用指針法能使目標(biāo)程序質(zhì)量高(占內(nèi)存少,運行速度快)。C語言程序設(shè)計視頻教程第10章10.3.1指向數(shù)組元素的指針

定義一個指向數(shù)組元素的指針變量的方法,與以前介紹的指向變量的指針變量相同。 例如:

inta[10]; int*p; p=&a[0]; p=a;C語言程序設(shè)計視頻教程第10章10.3.2通過指針引用數(shù)組元素

假設(shè)p已定義為一個指向整型數(shù)據(jù)的指針變量,并已給它賦了一個整型數(shù)組元素的地址,使它指向某一個數(shù)組元素。如果有以下賦值語句: *p=1;

表示將1賦給p當(dāng)前所指向的數(shù)組元素。C語言程序設(shè)計視頻教程第10章如果p的初值為&a[0],則: (1)p+i和a+i就是a[i]的地址。

(2)*(p+i)或*(a+i)是p+i或a+i所指向的數(shù)組元素,即a[i]。

(3)指向數(shù)組的指針變量也可以帶下標(biāo),如p[i]與*(p+i)等價。 根據(jù)以上敘述,引用一個數(shù)組元素,可以用:

(1)下標(biāo)法,如a[i]形式;

(2)指針法,如*(a+i)或*(p+i)。其中a是數(shù)組名,p是指向數(shù)組元素的指針變量,其初值p=a。C語言程序設(shè)計視頻教程第10章[例10.5]輸出數(shù)組中全部元素

假設(shè)有一個a數(shù)組,整型,有10個元素。要輸出各元素的值有3種方法。

(1)下標(biāo)法

(2)通過數(shù)組名計算數(shù)組元素地址,找出元素的值

(3)用指針變量指向數(shù)組元素C語言程序設(shè)計視頻教程第10章[例10.6]通過指針變量輸出a數(shù)組的10個元素#include<stdio.h>voidmain(){int*p,i,a[10];p=a;for(i=0;i<10;i++) scanf(“%d”,p++);printf(“\n”);for(i=0;i<10;i++,p++) printf(“%d“,*p);printf(“\n”);}C語言程序設(shè)計視頻教程第10章10.3.3用數(shù)組名作函數(shù)參數(shù)

如果一個實參數(shù)組,要想在函數(shù)中改變此數(shù)組中的元素的值,實參與形參的對應(yīng)關(guān)系有以下4種情況

(1)形參和實參都用數(shù)組名

(2)實參用數(shù)組名,形參用指針變量

(3)實參形參都用指針變量

(4)實參為指針變量,形參為數(shù)組名

[例10.7]將數(shù)組a中n個整數(shù)按相反順序存放

[例10.8]用實參指針改寫例10.7

C語言程序設(shè)計視頻教程第10章[例10.9]用選擇法對10個整數(shù)按由大到小順序排序C語言程序設(shè)計視頻教程第10章10.3.4多維數(shù)組與指針

用指針變量可以指向一維數(shù)組中的元素,也可以指向多維數(shù)組中的元素。但在概念上和使用上,多維數(shù)組的指針比一維數(shù)組的指針要復(fù)雜一些。C語言程序設(shè)計視頻教程第10章1、多維數(shù)組元素的地址 inta[3][4]={{1,3,5,7},{9,11,13,15},{17,19,21,23}}; a是一個數(shù)組名。A數(shù)組包含三行,即3個元素:a[0]、a[1]、a[2]。而每一個元素又是一個一維數(shù)組,它包含4個元素(即4個列元素)。例如,a[0]所代表的一維數(shù)組又包含4個元素:a[0][0]、a[0][1]、a[0][2]、a[0][3]??梢哉J(rèn)為二維數(shù)組是“數(shù)組的數(shù)組”,即二維數(shù)組a是由3個一維數(shù)組所組成的。

[例10.10]輸出二維數(shù)組有關(guān)的值C語言程序設(shè)計視頻教程第10章2、指向多維數(shù)組元素的指針變量(1)指向數(shù)組元素的指針變量[例10.11]用指針變量輸出二維數(shù)組元素的值(2)指向由m個元素組成的一維數(shù)組的指針變量[例10.12]輸出二維數(shù)組任一行任一列的值C語言程序設(shè)計視頻教程第10章3、用指向數(shù)組的指針作函數(shù)參數(shù)

一維數(shù)組名可以作為函數(shù)參數(shù)傳遞,多維數(shù)組名也可作函數(shù)參數(shù)傳遞。在用指針變量作形參以接受實參數(shù)組名傳遞來的地址時,有兩種方法: 1、用指向變量的指針變量

2、用指向一維數(shù)組的指針變量

[例10.13]有一個班,3個學(xué)生,各學(xué)4門課,計算總平均分?jǐn)?shù)以及第n個學(xué)生的成績

[例10.14]在上題基礎(chǔ)上,查找有一門以上課程不及格的學(xué)生,輸出他們的全部課程的成績C語言程序設(shè)計視頻教程第10章10.4字符串與指針

10.4.1字符串的表示形式

在C程序中,可以用兩種方法訪問一個字符串

(1)用字符數(shù)組存放一個字符串,然后輸出該字符串。

[例10.15]定義一個字符數(shù)組,對它初始化,然后輸出該字符串

(2)用字符指針指向一個字符串

[例10.16]定義字符指針

[例10.17]將字符串a(chǎn)賦值為字符串b [例10.18]用指針變量來處理例10.17問題C語言程序設(shè)計視頻教程第10章10.4.2字符指針作函數(shù)參數(shù)

將一個字符串從一個函數(shù)傳遞到另一個函數(shù),可以用地址傳遞的方法,即用字符數(shù)組名作參數(shù),也可以用指向字符的指針變量作參數(shù)。在被調(diào)用的函數(shù)中可以改變字符串的內(nèi)容,在主調(diào)函數(shù)中可以得到改變了的字符串。

[例10.19]用函數(shù)調(diào)用實現(xiàn)字符串的復(fù)制

(1)用字符數(shù)組作參數(shù)

(2)形參用字符指針變量C語言程序設(shè)計視頻教程第10章10.4.3對使用字符指針變量和字符數(shù)組的討論

雖然用字符數(shù)組和字符指針變量都能實現(xiàn)字符串的存儲和運算,但它們兩者之間是有區(qū)別的,不應(yīng)混為一談,主要有以下幾點。

(1)字符數(shù)組由若干個元素組成,每個元素中放一個字符,而字符指針變量中存放的是地址,決不是將字符串放到字符指針變量中。

(2)賦值方式。

(3)對字符指針變量賦初值。

(4)如果定義了一個字符數(shù)組,在編譯時為它分配內(nèi)存單元,它有確定的地址。而定義一個字符指針變量時,給指針變量分配內(nèi)存單元,在其中可以放一個字符變量的地址,也就是說,該指針變量可以指向一個字符型數(shù)據(jù),但如果未對它賦予一個地址值,則它并未具體指向一個確定的字符數(shù)據(jù)。

(5)指針變量的值是可以改變的。

[例10.20]改變指針變量的值

[例10.21]用帶下標(biāo)的字符指針變量引用字符串中的字符

(6)用指針變量指向一個格式字符串,可以用它代替printf函數(shù)中的格式字符串。C語言程序設(shè)計視頻教程第10章10.5指向函數(shù)的指針

10.5.1用函數(shù)指針變量調(diào)用函數(shù)

可以用指針變量指向整型變量、字符串、數(shù)組,也可以指向一個函數(shù)。一個函數(shù)在編譯時被分配給一個入口地址。這個函數(shù)的入口地址就稱為函數(shù)的指針??梢杂靡粋€指針變量指向函數(shù),然后通過該指針變量調(diào)用此函數(shù)。

[例10.22]求a和b中的大者C語言程序設(shè)計視頻教程第10章說明: (1)指向函數(shù)的指針變量的一般定義形式為

數(shù)據(jù)類型(*指針變量名)(函數(shù)參數(shù)表列); (2)函數(shù)的調(diào)用可以通過函數(shù)名調(diào)用,也可以通過函數(shù)指針調(diào)用(即用指向函數(shù)的指針表量調(diào)用)。

(3)“int(*p)(int,int);”表示定義一個指向函數(shù)的指針變量p,它不是固定指向哪一個函數(shù)的,而是表示定義了這樣一個類型的變量,它是專門用來存放函數(shù)的入口地址的。

(4)在給函數(shù)指針變量賦值時,只需給出函數(shù)名而不必給出參數(shù)。

(5)用函數(shù)指針變量調(diào)用函數(shù)時,只需將(*p)代替函數(shù)名即可,在(*p)之后的括號中根據(jù)需要寫上實參。

(6)對指向函數(shù)的指針變量,像p+n、p++等運算是無意義的。C語言程序設(shè)計視頻教程第10章10.5.2用指向函數(shù)的指針作函數(shù)參數(shù)

函數(shù)指針變量通常的用途之一是把指針作為參數(shù)傳遞到其他函數(shù)。函數(shù)的參數(shù)可以是變量、指向變量的指針變量、數(shù)組名、指向數(shù)組的指針變量等。函數(shù)的指針也可以作為參數(shù),以實現(xiàn)函數(shù)地址的傳遞,這樣就能夠在被調(diào)用的函數(shù)中使用實參函數(shù)。

[例10.23]設(shè)一個函數(shù)process,在調(diào)用它的時候,每次實現(xiàn)不同的功能。輸入a和b兩個數(shù),第一調(diào)用process時找出a和b中大者,第二次找出其中小者,第三次求a與b之和C語言程序設(shè)計視頻教程第10章10.6返回指針值的函數(shù)

一個函數(shù)可以返回一個整型值、字符值、實型值等,也可以返回指針型的數(shù)據(jù),即地址。其概念與以前類似,只是返回的值的類型是指針類型而已。 這種返回指針值的函數(shù),一般定義形式為 類型名*函數(shù)名(參數(shù)表列); [例10.24]有若干個學(xué)生的成績(每個學(xué)生有4門課程),要求在用戶輸入學(xué)生序號后,能輸出該學(xué)生的全部成績。用指針函數(shù)來實現(xiàn)

[例10.25]對上例中的學(xué)生,找出其中不及格課程的學(xué)生及其學(xué)生號C語言程序設(shè)計視頻教程第10章10.7指針數(shù)組和指向指針的指針

10.7.1指針數(shù)組的概念

一個數(shù)組,若其元素均為指針類型數(shù)據(jù),稱為指針數(shù)組,也就是說,指針數(shù)組中的每一個元素都相當(dāng)于一個指針變量。一維指針數(shù)組的定義形式為

類型名*數(shù)組名[數(shù)組長度];

例如:int*p[4];

[例10.26]將若干字符串按字母順序輸出C語言程序設(shè)計視頻教程第10章10.7.2指向指針的指針

在掌握了指針數(shù)組的概念的基礎(chǔ)上,下面介紹指向指針數(shù)據(jù)的指針變量,簡稱為指向指針的指針。

[例10.27]使用指向指針的指針

[例10.28]指針數(shù)組的元素指向整型數(shù)據(jù)C語言程序設(shè)計視頻教程第10章10.7.3指針數(shù)組作main函數(shù)的形參

指針數(shù)組的一個重要應(yīng)用是作為main函數(shù)的形參。在以往的程序中,main函數(shù)的第一行一般寫成以下形式:

voidmain()

括號中是空的。實際上,main函數(shù)可以有參數(shù),例如:

voidmain(intargc,char*argv[])C語言程序設(shè)計視頻教程第10章10.8有關(guān)指針的數(shù)據(jù)類型和指針運算的小結(jié)

10.8.1有關(guān)指針的數(shù)據(jù)類型的小結(jié)定義含義inti;定義整型變量iint*p;p為指向整型數(shù)據(jù)的指針變量inta[n];定義整型數(shù)組a,它有n個元素int*p[n];定義指針數(shù)組p,它由n個指向整型數(shù)據(jù)的指針元素組成int(*p)[n];p為指向含n個元素的一維數(shù)組的指針變量intf();f為返回整型函數(shù)值的函數(shù)int*p();p為返回一個指針的函數(shù),該指針指向整型數(shù)據(jù)int(*

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論