




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、第五章 指 針Chapter 5 Pointer第五章第五章 指指 針針PointerPointer第五章 指 針Chapter 5 Pointer5.1 指針的概念指針的概念 指針是指針是C言語的重要特征,是言語的重要特征,是C言語訪問內存數(shù)據和程序的靈敏言語訪問內存數(shù)據和程序的靈敏和有效的手段。和有效的手段。 C C言語的指針支持:言語的指針支持: 函數(shù)的地址調用;函數(shù)的地址調用; 動態(tài)分配內存;動態(tài)分配內存; 數(shù)組的地址援用。數(shù)組的地址援用。第五章 指 針Chapter 5 Pointer內存、地址、指針內存、地址、指針 (Memory ,Address, Pointer) (Memor
2、y ,Address, Pointer) 內存存放了計算機正在運轉的程序和程序正在運用的數(shù)據。內內存存放了計算機正在運轉的程序和程序正在運用的數(shù)據。內存的根本單元是字節(jié)存的根本單元是字節(jié)(Byte)。 為了訪問內存單元,為了訪問內存單元,CPU給每個內存單元一個編號,該編號稱給每個內存單元一個編號,該編號稱為該內存單元的地址。為該內存單元的地址。 變量是程序中可以改動的量,當說變量是程序中可以改動的量,當說明變量時,系統(tǒng)將為其在內存中開辟相明變量時,系統(tǒng)將為其在內存中開辟相應得內存單元。由此確定變量的地址及應得內存單元。由此確定變量的地址及內存中的表示方式。內存中的表示方式。2000H2019
3、H2019H2019Hint a=0;a的的內內存存單單元元a的地址的地址&a 假設有一變量假設有一變量p,其內容存放了,其內容存放了a的的地址地址&a,經過,經過p也可實現(xiàn)對也可實現(xiàn)對a的訪問,的訪問,p稱為指針,并指向稱為指針,并指向a。00H20H00p第五章 指 針Chapter 5 Pointer指針的闡明指針的闡明 指針是特殊類型的變量,其內容是變量的地址。在運用前必需指針是特殊類型的變量,其內容是變量的地址。在運用前必需闡明,闡明某標識符是指針類型,并可指向某種類型的對象。闡明,闡明某標識符是指針類型,并可指向某種類型的對象。指針的闡明格式:指針的闡明格式: type *pnam
4、e1,*pnamen;標識符命名的指針變量名。標識符命名的指針變量名。指針標志。指針標志。指針指向對象的類型。指針指向對象的類型。int *p, *q; /* p、q是指向整型變量的指針。是指向整型變量的指針。*/float *pfValue ,*pf; /* pfValue和和pf是指向浮點型的指針。是指向浮點型的指針。*/第五章 指 針Chapter 5 Pointer指針對變量的援用指針對變量的援用 定義指針的目的是經過指針援用內存對象,指針的援用應按如定義指針的目的是經過指針援用內存對象,指針的援用應按如下步驟進展:下步驟進展:闡明指針闡明指針 int a=0, *p;指針指向對象指針
5、指向對象p=&a;經過指針援用對象經過指針援用對象*p=*p+2;指針操作的兩種運算:指針操作的兩種運算:取地址運算取地址運算 & &a表示取變量表示取變量a地址的運算。地址的運算。間接運算間接運算 * *p表示取指針表示取指針p指向變量內容的運算。指向變量內容的運算。int a,*p; 2000Happ=&a; /* p指向指向a。 */2000H*p=2;2第五章 指 針Chapter 5 Pointer舉例:舉例:#include void main (void ) int x ,*p; x=55; p=&x; printf ( “ %d, %u , x, *p) ; *p=65; pr
6、intf ( “ %d, %u, x, *p) ;2000Hxp2000H5565關于指針的闡明:關于指針的闡明:指針必需指向對象后,才干援用。指針必需指向對象后,才干援用。 int *p; *p=2; /* Error! */ &和和 * 為互補運算。為互補運算。int a,*p; p=&a;那么:那么:&*p p *&a a第五章 指 針Chapter 5 Pointer指針的運算指針的運算 指針是特殊類型的變量,其內容是變量的地址,因此指針的運指針是特殊類型的變量,其內容是變量的地址,因此指針的運算及結果一定要符合地址邏輯。算及結果一定要符合地址邏輯。五種算術運算五種算術運算int a,
7、 b, *p1, *p2;p1=&a;p2=&b;a2000Hb2400Hp1p22000H2400Hp1+; /*含義指向含義指向a后的整型單元后的整型單元*/2019H2019Hp1- -; /*指向指向a前的整型單元前的整型單元*/p1+n; /*指向指向a后的第后的第n個整型單元個整型單元*/p1- n; /*指向指向a前的第前的第n個整型單元個整型單元*/p2- p1; /*a和和b之間差的單元數(shù)之間差的單元數(shù)*/結果結果200Hp n 相當于相當于: p的實踐內容的實踐內容 nsizeof(*p);六種關系運算六種關系運算比較兩個同類型變量之間的地址關系。比較兩個同類型變量之間的地
8、址關系。p1p2;第五章 指 針Chapter 5 Pointer指針賦值運算#include void main(void) int a,b,*p1,*p2; a=2; b=3; p1=&a; p2=&b; *p1=*p2; printf(“%d,%dn,a,b); a=3; b=5; p1=p2; printf(“%d,%d,*p1,*p2);差別差別a&a 2000Hb&b 2400Hp1p2232000H2400H第五章 指 針Chapter 5 Pointer5.2 指針與數(shù)組指針與數(shù)組 數(shù)組是同類型的變量的集合,各元素按下標的特定順序占據一數(shù)組是同類型的變量的集合,各元素按下標的特
9、定順序占據一段延續(xù)的內存,各元素的地址也延續(xù),指針對數(shù)組元素非常方便。段延續(xù)的內存,各元素的地址也延續(xù),指針對數(shù)組元素非常方便。指針與一維數(shù)組指針與一維數(shù)組經過指針援用數(shù)組元素可以分以下三個步驟:經過指針援用數(shù)組元素可以分以下三個步驟:闡明指針和數(shù)組闡明指針和數(shù)組int *p,a10;指針指向數(shù)組指針指向數(shù)組p=a; /*指向數(shù)組的首地址指向數(shù)組的首地址*/p=&a0; /*指向數(shù)組的首地址指向數(shù)組的首地址*/經過指針援用數(shù)組元素經過指針援用數(shù)組元素當指針指向數(shù)組的首地址時,那么下標為當指針指向數(shù)組的首地址時,那么下標為i的元素地址為:的元素地址為: p+i 或或a+i援用數(shù)組元素可以有三種方
10、法:援用數(shù)組元素可以有三種方法:下標法:下標法: a i 指針法:指針法: *(p+i)數(shù)組名法:數(shù)組名法:*(a+i)留意:數(shù)組名是地址常量,不能改動!留意:數(shù)組名是地址常量,不能改動! a=p; /*Error!*/第五章 指 針Chapter 5 Pointer舉例:打印數(shù)組中的奇數(shù)。舉例:打印數(shù)組中的奇數(shù)。#include void main(void ) int i ,a 10 ; for (i=0 ; i10 ; i+ ) scanf ( “ %d , &ai ) ; for (i=0 ; i10 ; i+) if ( a i % 2 ) printf ( “ %d, a i );
11、 數(shù)組元素法。數(shù)組元素法。循環(huán)輸入。循環(huán)輸入。循環(huán)判別,滿足條件輸出。循環(huán)判別,滿足條件輸出。數(shù)組名法。數(shù)組名法。 a+i *(a+i)指針法。指針法。 ,*p ;p = a;p+*(p+i)結果能否結果能否正確?正確?p= a; *p=&a0;*留意指針在運算時的變化。留意指針在運算時的變化。第五章 指 針Chapter 5 Pointer指針與字符串字符數(shù)組指針與字符串字符數(shù)組字符串在內存中可以存儲為兩種方式:字符串在內存中可以存儲為兩種方式:字符數(shù)組字符數(shù)組字符串常量字符串常量 可以使指針指向字符數(shù)組或字符串常量,經過指針援用字符數(shù)可以使指針指向字符數(shù)組或字符串常量,經過指針援用字符數(shù)組
12、或字符串的各個字符。組或字符串的各個字符。v指針與字符數(shù)組:指針與字符數(shù)組:char *chp,str =Hello!; /*闡明字符指針和字符數(shù)闡明字符指針和字符數(shù)組組*/chp=str; /*指針指向字符數(shù)組指針指向字符數(shù)組*/putchar( *(chp+2); /*經過指針援用數(shù)組元素經過指針援用數(shù)組元素*/v指針與字符串:指針與字符串:char *strp; /*闡明字符指針闡明字符指針*/strp=“Hello!; /*指針指向字符串指針指向字符串*/puts(strp); /*經過指針援用字符串經過指針援用字符串*/闡明指針時,可以同時賦初值,如:闡明指針時,可以同時賦初值,如:
13、char *strp=“Hello!;賦值表示將字符串的地址賦給指針!賦值表示將字符串的地址賦給指針!第五章 指 針Chapter 5 Pointer舉例:將字符串中的大寫字母轉化對應的小寫字母。舉例:將字符串中的大寫字母轉化對應的小寫字母。#include void main(void) char *p,s80; p=s; gets(p); for(;*p!=0;p+) if(*p=A&*p=Z) *p+=32; p=s; puts(p); 第五章 指 針Chapter 5 Pointer將無符號的八進制字符串轉換為十進制整數(shù)。將無符號的八進制字符串轉換為十進制整數(shù)。#include voi
14、d main(void) char *p,s6; int i,n=0; p=s; gets(p); for(;*p!=0;p+) n=n*8+*p-0; printf(“%dn,n); p指向指向s數(shù)組。數(shù)組。輸入字符串。輸入字符串。sps5560n=0*8+5-05n=5*8+5-045n=45*8+6-0366思索題:將思索題:將4位十六進值字符串轉化為十進制字符串。位十六進值字符串轉化為十進制字符串。第五章 指 針Chapter 5 Pointer二維數(shù)組的地址二維數(shù)組的地址如下闡明數(shù)組如下闡明數(shù)組int a34=1,2,3,4,5,6,7,8,9,10,11,12;其二維構造如下:其二
15、維構造如下:12345 6789101112行行列列為了便于索引,為了便于索引,C言語將數(shù)組分為兩級管理。言語將數(shù)組分為兩級管理。a0a1a2 將將a了解為一維數(shù)組,了解為一維數(shù)組, 數(shù)組有三個元素,它們分別為數(shù)組有三個元素,它們分別為a0、a1,a2 。各個元素又是一個有四個元素的一維數(shù)組。各個元素又是一個有四個元素的一維數(shù)組。從地址的角度看:從地址的角度看:a 為為a0 第一行的首地址第一行的首地址a+1 為為a1 第二行的首地址第二行的首地址a+2 為為a2 第三行的首地址第三行的首地址a+1 地址一次加一行。地址一次加一行。i行行j列數(shù)組元素的地址可以由列數(shù)組元素的地址可以由a i +
16、j得到。得到。第五章 指 針Chapter 5 Pointer數(shù)組名地址的兩級管理數(shù)組名地址的兩級管理aa0a1a2a00 a01 a02 a03a10 a11 a12 a13a20 a21 a22 a23等價地址及其管理方式等價地址及其管理方式數(shù)組名是數(shù)組的地址,而且是常量,數(shù)組名是數(shù)組的地址,而且是常量,* 運算不改動其值!運算不改動其值!以下三種地址等價:以下三種地址等價:a+i*(a+i)a i 加法按行遞增加法按行遞增加法按列遞增加法按列遞增(a+1)+1*(a+1)+1差別?差別?第五章 指 針Chapter 5 Pointer 數(shù)組名表示數(shù)組元素數(shù)組名表示數(shù)組元素a i j (*
17、(a+i) j *(*(a+i)+j)*(a i +j)指針與二維數(shù)組指針與二維數(shù)組int *p, a34;p=a;aij*(p+4*i+j)等價!等價!a00aa01a02a0a10a11a12a1a20a21a22a2a+1a1+2第五章 指 針Chapter 5 Pointer舉例:舉例: 在數(shù)組在數(shù)組a中查找輸入的數(shù),輸出行列位置。中查找輸入的數(shù),輸出行列位置。#include void main (void ) int a34=1,2,3,4,5,6,7,8,9,10,11,12; int i, j,iS; int *p; p=a; scanf (“ %d , &iS) ; for(
18、i=0;i3;i+)for(j=0;j4;j+) if(iS= a i j ) printf(“iS equal to a%d %d n,i , j); 下標法。下標法。*(a i +j)*(*(a+i)+j)*(p+4*i+j)第五章 指 針Chapter 5 Pointer5.3 指指 針針 數(shù)數(shù) 組組 指針是存放其它數(shù)據對象地址的變量。因此,指針可以構成數(shù)指針是存放其它數(shù)據對象地址的變量。因此,指針可以構成數(shù)組。每個數(shù)組元素為一個指針變量,且在內存中延續(xù)存放。組。每個數(shù)組元素為一個指針變量,且在內存中延續(xù)存放。指針數(shù)組的闡明指針數(shù)組的闡明闡明格式:闡明格式: type *數(shù)組名數(shù)組名co
19、nst exp;int *p 4 ;含義是在內存中開辟空間,并指明元素所指向的對象的類型。含義是在內存中開辟空間,并指明元素所指向的對象的類型。p 0 p 1 p 2 p 3 數(shù)組名數(shù)組名p為數(shù)組的地址。為數(shù)組的地址。運用前必需讓各元素指向對象。運用前必需讓各元素指向對象。int i, a34, *p3;for(i=0;i3;i+) p i =a i ;*(p2+1)=2; /*經過指針數(shù)組援用數(shù)組元素經過指針數(shù)組援用數(shù)組元素a21*/ 第五章 指 針Chapter 5 Pointer指針數(shù)組的運用舉例指針數(shù)組的運用舉例指針數(shù)組與多維數(shù)組指針數(shù)組與多維數(shù)組 經過指針數(shù)組按數(shù)學方式輸出數(shù)組的值。
20、經過指針數(shù)組按數(shù)學方式輸出數(shù)組的值。#include void main ( ) int i , j; int a34= 1,2,3,4, 5,6,7,8, 9,10,11,12 ; int *p3; p0 = a0; p1 = a1 ; p2 = a2; for (i=0 ; i3 ; i+) for (j=0; j4; j+) printf (“ %5d , *(pi+j); printf ( “n ) ; 123456789 101112 p0數(shù)組數(shù)組a的二維構造的二維構造p1p2a0a1a2每輸出一行,打印回車。每輸出一行,打印回車。第五章 指 針Chapter 5 Pointer指針
21、數(shù)組與多字符串指針數(shù)組與多字符串經過指針數(shù)組構成的菜單,執(zhí)行經過指針數(shù)組構成的菜單,執(zhí)行DOS命令。命令。#include void main(void )char *command = “dir, “time, “date, ch ; for ( ; ; ) do printf (“1: directoryn) ; printf (“2:set timen ) ; printf (“3:set daten) ; printf (“4:quitn) ; printf (nselection:) ; ch =getchar( ) ; printf (“n) ; while (ch4) ; if
22、(ch=4) break; system (commandch-1) ; 內層循環(huán)輸入選項內層循環(huán)輸入選項外層循環(huán)根據選項執(zhí)行命令外層循環(huán)根據選項執(zhí)行命令執(zhí)行系統(tǒng)命令函數(shù),如執(zhí)行系統(tǒng)命令函數(shù),如:system(“dir);dir0time0date0command0command1command23-1 2第五章 指 針Chapter 5 Pointer5.4 指向指針的指針指向指針的指針 假設指針變量的內容存放其它指針的地址,稱該指針為指向指假設指針變量的內容存放其它指針的地址,稱該指針為指向指針的指針。針的指針。 指向指針的指針的闡明:指向指針的指針的闡明:方式:方式: type *p;i
23、nt *p;p是一個指向整形指針的指針。是一個指向整形指針的指針。#include void main ( void) int x, *p, *q ; x=10; p=&x; q=&p; printf (“%d , * *q) ; p為指向整型的指針。為指向整型的指針。q為指向整型指針的指針。為指向整型指針的指針。xpq2000H3000H102000H3000H第五章 指 針Chapter 5 Pointer指向指針的指針的運用指向指針的指針的運用指向指針的指針普通用于多維數(shù)組和指針數(shù)組的操作。指向指針的指針普通用于多維數(shù)組和指針數(shù)組的操作。多維數(shù)組多維數(shù)組#include void main ( ) int a34=1,2,3,4,5,6,7,8,9,10,11,12, ; int *arr3 = a0 , a1 , a2 ; int i ,j, *p ; p=arr ; for (i=0 ;i3; i+) for (j=0 ; i4 ; j+) printf(“%5d , *( *(p+i)+ j ) ) ; printf (“n) ;aiaij123456789101112a0a1a2arrarrpp+1第五章 指 針Chapter 5 Pointer用于處置多字符
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 輔仁高中數(shù)學試卷
- 福建8年級下數(shù)學試卷
- 定南中學高考數(shù)學試卷
- 福建龍巖中學生數(shù)學試卷
- 復旦大學招生數(shù)學試卷
- 肝功能不全的急診搶救措施
- 2025至2030唇蜜行業(yè)市場深度研究與戰(zhàn)略咨詢分析報告
- 基礎心理學:了解人類行為與心理的基本原理
- 2025至2030乘用車語音識別行業(yè)市場深度研究與戰(zhàn)略咨詢分析報告
- 北京省考2024行測真題及答案
- GA/T 2182-2024信息安全技術關鍵信息基礎設施安全測評要求
- 培訓物業(yè)客服部禮儀禮節(jié)
- 北京海淀區(qū)一零一中學2025年八年級英語第二學期期末復習檢測模擬試題含答案
- 2025年廣東省高考生物試題(含答案解析)
- 遼寧省2024年7月普通高中學業(yè)水平合格性考試地理試卷(含答案)
- 院感知識手衛(wèi)生培訓內容
- 章程規(guī)范業(yè)務管理制度
- 2025年新疆中考數(shù)學試卷真題
- QGDW11914-2018電力監(jiān)控系統(tǒng)網絡安全監(jiān)測裝置技術規(guī)范
- 新生兒洗澡及皮膚護理
- 保鮮庫建設項目可行性研究報告(可編輯)
評論
0/150
提交評論