C語言教程-第八章-指針_第1頁
C語言教程-第八章-指針_第2頁
C語言教程-第八章-指針_第3頁
C語言教程-第八章-指針_第4頁
C語言教程-第八章-指針_第5頁
已閱讀5頁,還剩15頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第八章指針2回顧數(shù)組是可以在內(nèi)存中連續(xù)存儲多個元素的結(jié)構(gòu)數(shù)組中的所有元素必須屬于相同的數(shù)據(jù)類型數(shù)組必須先聲明,然后才能使用。聲明一個數(shù)組只是為該數(shù)組留出內(nèi)存空間,并不會為其賦任何值數(shù)組的元素通過數(shù)組下標(biāo)訪問一維數(shù)組可用一個循環(huán)動態(tài)初始化,而二維數(shù)組可用嵌套循環(huán)動態(tài)初始化二維數(shù)組可以看作是由一維數(shù)組的嵌套而構(gòu)成的3目標(biāo)理解指針的概念定義指針變量掌握對指針的操作理解指針和數(shù)組的關(guān)系4指針簡介2-1內(nèi)存10intxED53地址變量數(shù)據(jù)ED53intptr_x指針指針ptr_x指向變量x5指針也是一個變量,只不過該變量中存儲的是另一個對象的內(nèi)存地址如果一個變量存儲另一個對象的地址,則稱該變量指向這個對象由于指針值是數(shù)據(jù),指針變量可以賦值,所以一個指針的指向在程序執(zhí)行中可以改變。指針p在執(zhí)行中某時刻指向變量x,在另一時刻也可以指向變量y指針簡介2-26聲明并初始化指針變量數(shù)據(jù)類型*指針名;int*ptrnum;char*ptralpha;float*rate_ptr;double*p,*q;

值為NULL的指針稱為空指針,這意味著,指針并不指向任何地址。

在頭文件stdio.h中,NULL定義為常量。ptrnum=NULL;7與指針相關(guān)的運(yùn)算符2-1intnum,*ptrnum;ptrnum=#

取地址符內(nèi)存100numFF7Cptrnum指針FF7C&8與指針相關(guān)的運(yùn)算符2-2intnum,*ptrnum;ptrnum=#*ptrnum=15;間接運(yùn)算符內(nèi)存100numFF7Cptrnum指針FF7C15*9指針的特點(diǎn)指針變量的命名規(guī)則和其他變量的命名規(guī)則一樣指針不能與現(xiàn)有變量同名

指針可存放C語言中的任何基本數(shù)據(jù)類型、數(shù)組和其他所有高級數(shù)據(jù)結(jié)構(gòu)的地址若指針已聲明為指向某種類型數(shù)據(jù)的地址,則它不能用于存儲其他類型數(shù)據(jù)的地址應(yīng)為指針指定一個地址后,才能在語句中使用指針10指針使用示例1#include<stdio.h>voidmain(){ intvar=10; int*ptr_var; ptr_var=&var; printf("var的值是:

%d",var); printf("\nvar的內(nèi)存地址是:

%x",&var); printf("\n指針

ptr_var的地址是:

%x\n",&ptr_var); printf("\nvar的值是:

%d",*ptr_var); printf("\nvar的地址是:

%x\n",ptr_var);}內(nèi)存varptr_var1012ff7cvar的值是:10var

的內(nèi)存地址是:12ff7c12ff7c12ff78指針ptr_var的地址是:12ff78var的值是:10var的地址是:12ff7c11指針使用示例2voidmain(){

intnum1=50,num2=100;int*ptr1,*ptr2;ptr1=&num1;printf("num1的值是:

%d",*ptr1);printf("\nnum1的地址是:

%x\n",ptr1);ptr2=&num2;printf("\nnum2的值是:

%d",*ptr2);printf("\nnum2的地址是:

%x\n",ptr2);*ptr2=*ptr1;printf("\n重新賦值后

num2的值是:

%d",*ptr2);printf("\n重新賦值后

num2的地址是:

%x\n",ptr2);}內(nèi)存num1ptr15012ff7c12ff7cnum2ptr210012ff7812ff785012intx,*ptr_x,*ptr_y;ptr_x=&x;ptr_y=ptr_x;

指針賦值運(yùn)算100xFF7Cptr_xptr_yFF7CFF7Cinta[5],*pa;pa=a;

a[0]a[1]a[2]a[3]a[4]2343115046paFE60FE64FE68FE6CFE70FE6013int*ptrnum,arr_num[8];ptrnum=&arr_num[0];ptrnum++;指針?biāo)阈g(shù)運(yùn)算2-1使用遞增/遞減運(yùn)算符(++和--)將指針遞增或遞減內(nèi)存arr_num[0]arr_num[1]arr_num[2]arr_num[3]arr_num[4]arr_num[5]arr_num[6]arr_num[7]1023156041491339一個類型為T的指針的移動,以sizeof(T)為移動單位。

14將指針加上或者減去某個整數(shù)值ptrnum=&arr_num[0];ptrnum=ptrnum+4;printf(“%d”,*ptrnum);ptrnum=&arr_num[5];ptrnum=ptrnum-2;printf(“%d”,*ptrnum);指針?biāo)阈g(shù)運(yùn)算2-24160內(nèi)存

arr_num[0]arr_num[1]arr_num[2]arr_num[3]arr_num[4]arr_num[5]arr_num[6]arr_num[7]102315604149133915比較兩個指針

#include<stdio.h>voidmain(){ int*ptrnum1,*ptrnum2; intvalue=1; ptrnum1=&value; value+=10; ptrnum2=&value; if(ptrnum1==ptrnum2) printf("\n兩個指針指向同一個地址\n"); else printf("\n兩個指針指向不同的地址\n");}

指針關(guān)系運(yùn)算16

指向數(shù)組的指針一個數(shù)組存儲在一塊連續(xù)內(nèi)存單元中;數(shù)組名就是這塊連續(xù)內(nèi)存單元的首地址;第(i+1)個數(shù)組元素的地址可表示為&data[i]或(data+i)。可以通過以下方式為指向數(shù)組的指針賦值:inta[10];pa=&a[0];//或者pa=a;一個指針變量可以指向一個數(shù)組元素

int*ptr,data[10];ptr=data+3;//或者ptr=&data[3]17指向數(shù)組的指針示例1#include<stdio.h>voidmain(){ intdata[]={5,10,15,20,25}; inti=0; int*ptr;

ptr=data; while(i<5) { printf(“\n第

%d個元素的存儲地址為:%x,值為:

%d\n“,i+1,ptr,*ptr); i++;

ptr++; }}內(nèi)存data[0]data[1]data[2]data[3]data[4]51015202512ff6c12ff7012ff7412ff7812ff7c第1個元素的存儲地址為:12ff6c,值為:5第2個元素的存儲地址為:12ff70,值為:10第3個元素的存儲地址為:12ff74,值為:15第4個元素的存儲地址為:12ff78,值為:20第5個元素的存儲地址為:12ff7c,值為:25ptrptrptrptrptr18指向數(shù)組的指針示例2voidmain(){charname[5]={'M','A','D','A','M'};intflag=1;

char*start=name,*end=name+4;for(;start<=end;start++,end--){ if(*start!=*end) { flag=0;break; }}if(flag) printf("\n該字符串是回文串\n");elseprintf("\n該字符串不是回文串\n");}內(nèi)存name[0]name[1]name[2]name[3]name[4]MADAM該字符串是回文串startendstartendendstart19總結(jié)2-1指針是一個變量,它存儲另一個對象的內(nèi)存地址指針的聲明由基本類型、星號(*)和變量名組成為指針賦值,賦值運(yùn)算符右側(cè)必須是一個地址。如果是普通變量需要在前面加一個取地址運(yùn)算符&;如果是另一個指針變量或者是一個

溫馨提示

  • 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

提交評論