(6.34)-第33課(8.2節-一維數組與指針)_第1頁
(6.34)-第33課(8.2節-一維數組與指針)_第2頁
(6.34)-第33課(8.2節-一維數組與指針)_第3頁
(6.34)-第33課(8.2節-一維數組與指針)_第4頁
(6.34)-第33課(8.2節-一維數組與指針)_第5頁
已閱讀5頁,還剩9頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

一維數組與指針指針的使用數組的指針數組的指針其實就是數組在內存中的起始地址。而數組在內存中的起始地址就是數組變量名,也就是數組第一個元素在內存中的地址a2000200420082036…...…...a[0]a[1]a[2]a[9]aa+1a+2a+9……例:

inta[10];a[i]的地址:

&a[i]<=>a+ia[i]的內容:

a[i]<=>*(a+i)指向一維數組的指針變量如果將數組的起始地址賦給某個指針變量,那么該指針變量就是指向數組的指針變量例:inta[10],*p=a;p2000200420082036…...aa+1a+2a+9………...a[0]a[1]a[2]a[9]2000pp+1p+2p+9……*a*(a+1)*(a+2)*(a+9)……*p*(p+1)*(p+2)*(p+9)……p[0]p[1]p[2]p[9]……地址元素注意:p+1指向數組的下一個元素,而不是簡單地使指針變量p的值+1。其實際變化為p+1*size(size為一個元素占用的字節數)。例如:假設指針變量p的當前值為2000,則p+1為2000+1*4=2004,而不是2001指向一維數組的指針變量#include<stdio.h>#defineN10voidmain(){

inta[N],i;for(i=0;i<N;i++)scanf("%d",&a[i]);for(i=0;i<N;i++)printf("%d",a[i]);}scanf("%d",a+i);printf("%d",*(a+i));下標法地址法printf("%d",p[i]);指針變量下標運算法int*p=a;【例】輸入輸出一維數組中的所有元素指向一維數組的指針變量#include<stdio.h>#defineN10voidmain(){}

指針變量法每次p++執行的是什么操作?p將指向數組中下一個元素

inta[N],*p;for(p=a;p<a+N;p++)scanf("%d",p);for(p=a;p<a+N;p++)printf("%d",*p);方法二:想一想?12345678910ap100104108112116120124128132136100inta[10],*p;p=a;printf("%d",*p);p++;printf("%d",*p);104a為數組名,代表數組的首地址,它是一個常量,不能進行上述運算是否可以進行a++或a--這樣的運算?想一想?【例1:】編寫一個函數,返回一維數組n個元素的最大值、最小值和平均值。在主函數里調用該函數,并輸出結果解題思路本函數需要返回三個結果,通過return語句只能帶回一個結果(例如:平均值),另外兩個結果需要使用指針變量形參間接返回程序實現#include<stdio.h>floatfun(inta[],intn,int*pmax,int*pmin){inti,ma,mi;floats=0,aver;ma=mi=a[0];//循環前指定第一個元素最大(最小)for(i=0;i<n;i++)//使用循環尋找最大、最小值,計算累加和{if(ma<a[i])ma=a[i];if(mi>a[i])mi=a[i];s+=a[i];}aver=s/n;//計算平均值

*pmax=ma;//將最大值賦給pmax所指向的單元*pmin=mi;//將最小值賦給pmin所指向的單元returnaver;//將平均值作為函數值返回}int*a,ma=mi=*a;*(a+i)*(a+i)*(a+i);*(a+i);*(a+i);voidmain(){intb[100],max,min,i,n;floataver;intprintf("請輸入數組的長度:");scanf("%d",&n);printf("請輸入%d個數:",n);for(i=0;i<n;i++)//輸入數組中各元素的值scanf("%d",&b[i]);aver=fun(b,n,&max,&min);//調用函數funprintf("最大值為:%d\n",max);//輸出結果printf("最小值為:%d\n",min);printf("平均值為:%.2f\n",aver);}【例2:】編寫一個函數,其功能是將一個數組前面各數順序向后移動m個位置,最后m個數變成最前面m個數,在主函數里調用該函數,并輸出移位后的結果解題思路這是一個循環右移的算法假設有n個元素。欲將最后那個元素移位至第一個元素位置(循環右移一個元素)的操作步驟如下:先將最后那個元素放在一個中間變量里,然后將前面的n-1個元素依次往后移動一個元素位置,再將存放在中間變量里那個元素(原來的最后那個元素)放在第一個元素的位置。將上述操作重復m次,即可實現所要求的功能例原數組為:12345678910

假設m=3,則移位后的數組變為:89101234567程序實現voidmove(int*p,intn,intm)//第1個形參是指針變量,接收實參數組的首地址{intt,i,j;for(i=0;i<m;i++){t=*(p+n-1);//將最后那個元素放在一個中間變量里for(j=n-2;j>=0;j--)//將前面的n-1個元素依次往后移動一個元素位置*(p+j+1)=*(p+j);*p=t;//將存放在中間變量里那個元素(原來的最后那個元素)放在第一個元素的位置}}voidmain(){intarr[20],n,m,i;printf("請輸入數組的長度:");scanf(“%d",&n);//輸入數組的長度printf("請輸入%d個數:",n);for(i=0;i<n;i++)//輸入數組中各元素的值scanf("%d",&arr[i]);printf("請輸入m:");scanf("%d",&m);

move(arr,n,m);//調用函數moveprintf("移位完成后:”);

溫馨提示

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

評論

0/150

提交評論