版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
指針與函數(shù)為指針變量賦初值取內(nèi)容運算指針運算取地址運算的一般形式:&變量取地址運算若有變量說明:inta,b,*p,
*q;scanf(“%d”,
&a);p=&a;q=p;&a10int
*p;int
a;&aint
*q;p=&a;*p=10;printf(“%d”,*p);scanf(“%d”,&a);scanf(“%d”,p);b=*p+25;讓p指向變量a把10賦給變量a輸出p所指變量的值給變量a輸入值給變量a輸入值把35賦給變量b取內(nèi)容運算取內(nèi)容運算的一般形式:*指針表達式若*p出現(xiàn)在賦值號左邊,表示給p所指變量賦值若*p不出現(xiàn)在賦值號左邊,表示p所指變量的值若有變量說明:inta,b,*p
;
為指針變量賦初值指針變量使用前必須有值指針變量的初值必須是地址值(不能是整數(shù))在定義指針變量時同時初始化int a,*p=
&a;使用賦值語句賦值inta,*p; p=&a;NULL是在stdio.h中定義的符號常數(shù)#defineNULL0可以為指針賦空值(NULL),此時指針不指向任何變量,如:p=NULL;
(p為空指針變量),不提倡p=0;
或
p=‘\0’。指針變量0012FF440012FF3C001整型變量i變量i_pointer0012FF40整型變量k…...10100012FF442FF38例 inti,k,*i_pointer;i=10;
i_pointer=&i;k=
i;k=
*i_pointer;--直接訪問--間接訪問變量的兩種賦值方式#include
<stdio.h>intmain(
){
int a,b;int *pa, *pb;a=100; b=10;pa=&a; pb=&b;printf("%d,%d\n",a,b);printf("%d,%d\n",*pa,*pb);return
0;}[例8-1]
用直接方式和間接方式輸出變量的值。給變量a,b初始化給指針變量pa,pb初始化對變量的直接訪問對變量的間接訪問[例8-2]將兩個整型數(shù)a,b按由大到小次序輸出。#include
<stdio.h>intmain(
){int
a,b,*p1=&a,*p2=&b,*p;scanf("%d%d",&a,&b);if
(a<b)if
(a<b){
p=p1;p1=p2;p2=p; }printf("%d,%d\n",a,b);printf("%d,%d\n",*p1,*p2);return
0;}5
95,
99,
55
99,
59,
5交換p1,p2的指向#include
<stdio.h>intmain(
){inta,b,*p1=&a,*p2=&b,
p;scanf("%d%d",&a,&b);交換p1,p2所指的單元的內(nèi)容{
p=*p1;*p1=*p2;*p2=p; }printf("%d,%d\n",a,b);printf("%d,%d\n",*p1,*p2);return
0;}感謝觀看指針數(shù)組指針數(shù)組:數(shù)組中的元素均為指針類型。適合用來指向字符串。1.定義形式數(shù)據(jù)類型
*
數(shù)組名[常量表達式]
例如:int*pa[6];[]比*優(yōu)先級高,因此pa先與[6]結(jié)合,形成pa[6],具有6個元素。然后再與*結(jié)合,表示此數(shù)組中每一個元素是指針型的。8.5指針數(shù)組2整數(shù)整數(shù)整數(shù)整數(shù)整數(shù)整數(shù)pa[0]pa[1]pa[2]pa[3]pa[4]pa[5]指針數(shù)組pa2.功能定義一個由6個指針變量構(gòu)成的指針數(shù)組,數(shù)組中的每個數(shù)組元素都是一個指向一個整數(shù)的指針變量。3.指針數(shù)組的初始化*pa[0]123a[0]*pa[1]456a[1]*pa[2]789a[2]必須用地址值為指針數(shù)組初始化inta[3][3]=
{1,2,3,4,5,6,7,8,9},*pa[3];pa[0]=a[0];pa[1]=a[1];pa[2]=a[2];指針數(shù)組pa[3]
相當于有三個指針,*pa[0],*pa[1],*pa[2]初始化的結(jié)果:注意:int*p[5];
與
int(*p)[5];
不同44.指針數(shù)組的使用用指針數(shù)組和用數(shù)組地址引用數(shù)組元素是等價的*(pa[i]+j)與*(a[i]+j);*(*(pa+i)+j)與*(*(a+i)+j);(*(pa+i)[j]與(*(a+i)[j];*(&pa[0][0]+3+i+j)與*(&a[0][0]+3+i+j);*(pa[0]+3+i+j)與*(a[0]+3+i+j)
;pa[i][j]與a[i][j]
;區(qū)別:pa[i]的值可變,而a[i]的值不可變。#include
<stdio.h>#defineN
4intmain()
{inta[N][N],i,j,sum=0,*p[N]
;for(i=0;i<N;i++)p[i]=a[i];for(i=0;i<N;i++)for(j=0;j<N;j++)scanf("%d",p[i]+j);5[例8-12]
求N階方陣副對角線上的元素之和。for(i=0;i<N;i++)for(j=0;j<N;j++)if(i+j==N-1)sum+=p[i][j];printf("sum=%d\n",sum);return0;}1 2 3 45 6 7 89 10
11
1213 14
15
16sum=34感謝觀看指針變量與數(shù)組指針變量與數(shù)組指針與一維數(shù)組指針的運算字符指針與字符串數(shù)組中的每個元素都可以通過下標唯一確定,即通過下標可以訪問(操作)數(shù)組中的元素。在C語言中,凡是可以通過數(shù)組下標方式完成的訪問(操作)均可以通過指針方式實現(xiàn)。C語言規(guī)定:數(shù)組名就是數(shù)組的首地址常量,即int
a[10];a==
&a[0]C語言系統(tǒng)內(nèi)部處理機制,指針方式效率高,但不直觀。指針與一維數(shù)組a[6]a[0]a[1]a[2]a[3]a[4]a[5]a[9]memory訪問數(shù)組的兩種方式下標方式inta[10],
*p;p=a;
(等價于
p=&a[0];)使p指向a數(shù)組的第一個元素a[0];a[i],*(a+i),
p[i]
,*(p+i)
等價
。指針方式通過指向數(shù)組元素的指針變量訪問所需元素。int
a[10],*p=&a[0];p++;p=&a[0]p++p++指向數(shù)組元素的指針通過指針引用數(shù)組a[7]a[8]下標法
#include
<stdio.h>intmain(
){ inta[10],
i;for(i=0;i<10;i++)scanf("%d",
&a[i]);printf("\n");for(i=0;i<10;i++)printf("%3d",a[i]);return
0;}例:輸出數(shù)組全部元素。指針法
#include
<stdio.h>intmain(
){int
a[10],
i, *p=a;for(i=0;i<10;i++,p++)scanf(“%d”,
p);printf(“\n”);for(p=a;p<(a+10);
p++)printf(“%3d”,*p
);return
0;}*(a+i)
指針的運算指針的算術(shù)運算指針表達式與整數(shù)的加減運算指針自增自減運算指針的關(guān)系運算同類指針相減強制類型轉(zhuǎn)換運算指針表達式與整數(shù)的加減運算一般形式p+n或 p-n其中:p是任意一個指針表達式,n是任何一種整型表達式。計算規(guī)則表達式
p+n
的值
=
p的值
+
p所指類型長度*n表達式
p-n的值
=
p的值 -
p所指類型長度*n說明:只有當p和p+n或p-n都指向連續(xù)存放的同類型數(shù)據(jù)區(qū)域(數(shù)組)時,指針加、減才有實際意義。C語言規(guī)定:表達式p+n和p-n的類型與p相同。p,ap+1,a+1p+i,a+ia[0]a[1]a[i]a數(shù)組*(p+i)例如:int
a[10],*p,*q;p=a;q=a+6;a[6]p+9,a+9a[9]q=a+6數(shù)組和指針的本質(zhì)不同:數(shù)組名是指針常量,不能改變指針常量的值,a++;a+=2;a=p;
都是非法的。指針p是變量,若p指向數(shù)組的首地址,p+1代表該類型的下一變量的地址。語法后綴:
p++
; p--
;前綴:
++p
; --p
;⑴
進行++p或p++運算后都使p指向下一個數(shù)據(jù)表達式p++的值等于p的原來值;表達式++p的值等于p的新值;⑵取內(nèi)容運算符“
*
”、取地址運算符“
&
”和自增自減運算符都是單目運算符,運算的優(yōu)先級相同,結(jié)合方向都是自右至左
指針自增自減運算......p-3p-2p-1pp+1p+2..................數(shù)組a低地址高地址當兩個指針指向同一個數(shù)組中的元素時,才能進行>、<、>=、<=、!=、==的關(guān)系運算。任何指針p與NULL進行“p==NULL”或“p!=NULL”運算均有意義:判斷指針p
是否指向空。指針的關(guān)系運算只有同類指針進行比較才有意義。指針的關(guān)系運算例:inta[10],
*p;p=&a[4];a[4]
假定指針p和q指向同一個數(shù)組,則:p>
q:p>=q:p指針所指元素位于q所指元素之后時為1,反之為0。p指針所指元
素位于q所指元素之后(或兩指針指向同一元素)時為1,反之為0。p==q:兩指針指向同一元素時為
1,反之為0。p!=q:兩指針不指向同一元素時為
1,反之為0。語法:
指針表達式 關(guān)系運算符 指針表達式==和!=運算符,比較兩個指針表達式是否指向同一個內(nèi)存單元;<、<=、>、>=,比較兩個指針所指內(nèi)存區(qū)域的先后次序。.語法
:p-q說明:同類指針相減時,兩個指針應(yīng)該指向連續(xù)存放的同類數(shù)據(jù)區(qū)域。p-q
的值,等于(p的值-q的值)/所指類型長度,
即p,
q兩個指針之間數(shù)據(jù)元素的個數(shù)。例如:若有
int
a[10]
,*p, *q;p=a;q=&a[5];則
p-q=5,表示p,
q之間數(shù)據(jù)元素的個數(shù)是5。同類指針相減格式:(類型名
*) 指針表達式功能:將指針表達式的值轉(zhuǎn)換成指定類型的指針。例如:int
*p;double d,
*q=&d;p=(int*
)q;強制類型轉(zhuǎn)換運算[例8-3]用指針訪問數(shù)組元素。#include
<stdio.h>intmain(
){inta[10],*pa,
i;for(i=0;i<10;i++)a[i]=i+1;pa=a;for(i=0;i<10;i++,pa++)printf("%d
",*pa);printf("\n");return
0;}不要忘記賦初值字符指針與字符串字符串的表示形式用字符數(shù)組表示,如:intmain(
){ charstring[]=“Ilove
China!”;printf(“%s\n”,string);return
0;}數(shù)組名用字符指針實現(xiàn),如:intmain(
){ char*string=“IloveChina!”;printf(“%s\n”,string);return
0;}把“I
love
China!”的首地址賦給指針變量string特點:字符串的長度不受限制;字符指針指向別處,字符串將失蹤。此字符串不能改變,只能讀取。[例8-5]使用字符指針輸出字符串。#include
<stdio.h>intmain(
){ char*p="C
Language";for(;*p!=′\0′;)putchar(*++p);return
0;}字符指針變量與字符數(shù)組的區(qū)別字符數(shù)組由若干個元素組成,每個元素中放一個字符,而字符指針變量中存放的是字符串的首地址。賦值方式:
char
str[
]=“I
am
aboy!”或:
char
str[20];gets(str);字符指針變量指向字符串首地址。賦值方法三種:char*pa=“Iama
boy!”char
*pa;pa=“Iama
boy!”如果要修改字符串的內(nèi)容,必須按如下方式處理:(3)charstr[20],
*pa=str;gets(str);
或scanf(“%s”,pa);或
scanf(“%s”,str);注意區(qū)別?感謝觀看指向數(shù)組的指針變量a[0]a[1]a[2]類型說明符
(*變量名)[正整型常量表達式];定義一個名為“變量名”的指針變量,這個指針變量所指的對象是一個有“正整型常量表達式”個元素的一維數(shù)組
(建立一個與二維數(shù)組名一樣的行指針)例如:inta[3][4],(*p)[4]=a;定義p是一個指針變量,它指向包含4個整型元素的一維數(shù)組。p,ap+1p+2指向數(shù)組的指針變量intmain(
){int
a[3][4]={{1,3,5,7},{9,11,13,15},{17,19,21,23}};int*p,i,j
;p=a[0];scanf(“d,
d”,&i,&j);printf(“a[d][d]=d\n”,i,j,*(p+i*4+j));return
0;}輸入:1,2運行結(jié)果:a[1][2]=13這里的指針變量p是定義為指向整型數(shù)據(jù)的a[i][j]在數(shù)組中的位置用相對于數(shù)組起始位置intmain(
){ int
a[3][4]={{1,3,5,7},{9,11,13,15},{17,19,21,23}};int(*p)[4],i,j
;p=a;scanf(“d
d”,&i,&j);printf(“a[d][d]=d\n”,i,
j,*(*(p+i)+j));return
0;}輸入:1,2運行結(jié)果:a[1][2]=13p,a第i行j列元素的地址為:*(p+i)+j第i行j列元素的值為:*(*(p+i)+j)這里的指針變量p不是指向整型p+1a[0]=1357變量,而是指向一個包含4個整p+2a[1]=9111315a[2]=17192123型元素的一維數(shù)組。感謝觀看指針與字符串數(shù)組字符串數(shù)組數(shù)組中的每個元素都是存放字符的數(shù)組。字符串數(shù)組的每一行可存放一個字符串。用賦初值的方式給字符串數(shù)組賦值⑴直接給字符串數(shù)組賦初值⑵用指針數(shù)組處理多個字符串8.6指針與字符串數(shù)組VC\0FORTRAN\0BASIC\0Foxpro\0charb[4][8]={″VC″,″FORTRAN″,″BASIC″,
″Foxpro″};二維字符數(shù)組⑴直接給字符串數(shù)組賦初值
由于字符串長短不一,定義時應(yīng)考慮最長的串和結(jié)束標志的位置。防止造成內(nèi)存單元浪費。若有定義:char*f[4]={″VC″,″FORTRAN″,″BASIC″,
″Foxpro″};此定義還可以寫成:char*f[]={″VC″,″FORTRAN″,″BASIC″,
″Foxpro″};則數(shù)組f中的每個元素都存放著對應(yīng)的一個字符串的首地址,各字符串依次存入各相應(yīng)的首地址開始的連續(xù)存儲單元中。f[0]f[1]f[2]f[3]VC\0FORTRAN\0BASIC\0Foxpro\0節(jié)省內(nèi)存空間?、朴弥羔様?shù)組處理多個字符串[例8-13]
用指針數(shù)組輸出多個字符串。#include
<stdio.h>intmain(
){char *s[4]={"dog","cat","pig","all
animals"};int
i;for(i=0;
i
<4; i++)printf("%s\n",
s[i]);return
0;}指針數(shù)組s各元素的值就是每個字符串的首地址。
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年及未來5年市場數(shù)據(jù)中國CPAAS服務(wù)行業(yè)市場發(fā)展數(shù)據(jù)監(jiān)測及投資戰(zhàn)略咨詢報告
- 2026年及未來5年市場數(shù)據(jù)中國公路建設(shè)行業(yè)市場深度評估及投資戰(zhàn)略規(guī)劃報告
- 2026年及未來5年市場數(shù)據(jù)中國運動健身行業(yè)發(fā)展監(jiān)測及投資戰(zhàn)略數(shù)據(jù)分析研究報告
- 老年慢性病健康管理方案
- 護理文書書寫實訓(xùn)課件
- 老年患者誤吸不良事件吞咽功能訓(xùn)練計劃調(diào)整方案效果評價方法
- 陜西電信考試題及答案
- 邁瑞心電監(jiān)測技術(shù)
- 奇門意象考試題及答案
- 合理用藥知識講座課件
- 人教版三年級上冊豎式計算練習(xí)300題及答案
- GB/T 6974.5-2023起重機術(shù)語第5部分:橋式和門式起重機
- 心臟血管檢查課件
- 運用PDCA循環(huán)管理提高手衛(wèi)生依從性課件
- 二手房定金合同(2023版)正規(guī)范本(通用版)1
- 《高職應(yīng)用數(shù)學(xué)》(教案)
- 點因素法崗位評估體系詳解
- 漢堡規(guī)則中英文
- DB63T 1933-2021無人機航空磁測技術(shù)規(guī)范
- GB/T 5231-2022加工銅及銅合金牌號和化學(xué)成分
- GB/T 26480-2011閥門的檢驗和試驗
評論
0/150
提交評論