版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第十一章內存管理12回顧函數的作用函數的聲明格式和各部分作用函數中的實參和形參的區(qū)別函數的調用3回顧字符信息在計算機中的描述字符信息的存儲方式字符信息的處理函數4目標了解內存地址、指針的概念理解指針和數組之間的關系掌握指向一維數組的指針操作5內存地址數據類型的不同,每個變量需要分配的內存單元數目也不同每個變量都需要分配連續(xù)的內存單元inti=3;Intj=5;floatf字符型變量需要占用1個內存單元;短整形變量需要占用連續(xù)的2個內存單元;單精度變量需要占用連續(xù)的4個內存單元;雙精度變量需要占用連續(xù)的8個內存單元。6變量與地址當變量只占用一個內存單元時,內存單元的地址就是變量的地址;當變量占用連續(xù)的若干個內存單元時,最前面一個單元的地址就是該變量的地址,這一地址稱作為首地址。變量名數據類型地址i整型2001j整型2003f單精度2005inti=3,j=5,float=f;7數組與地址當一個數組占用連續(xù)的若干個內存單元時,最前面的單元地址稱為數組的首地址,也是第一個數組元素的地址,通常用數組名代表數組的首地址數組占用的總單元數等于數組長度*每個數組元素占用的內存單元數對一個數組來說,所分配的內存單元必須是連續(xù)的,并且是按照順序對應數組元素的int[3]={1,2,3};數組元素a[i]的地址=數組首地址+i*數組元素的數據類型所占用單元數數組元素a[1]的首地址:3000+1*2=30028指針指針是一種數據類型,專門用于存放內存地址。按照這一類型可以定義相應的變量,這個變量就是指針變量,變量中存放的數據就是地址地址的寬度是固定的32個二進制位,所以指針變量占據的寬度也是固定的4字節(jié)數據類型*指針名=初值數據類型不是指針變量中存放的數據類型,而是它將要指向的變量或數組的數據類型定義成某種數據的指針變量,將來只能用來指向同種數據類型的其它變量或數組*運算符是指針運算符在此地作用是將一個變量聲明為指針變量?!俺踔怠蓖ǔJ恰?普通變量名”、“&數組元素”或“數組名”9指針先定義了整形變量a,然后定義一個指向整形變量的指針變量p,并賦初值為事先定義的變量a的地址,即指針變量p指向整形變量a,指針變量p中存儲著變量a的首地址inta;Int*p=&a;1000H251000H10指針floatf1,f[10];float*p1=&f1;float*p2=f;先定義單精度形變量f1和數組f;然后定義一個指向單精度形的指針變量p1,并為其賦初值,使其指向變量f1,即指針變量p中存儲著變量f的首地址;最后再定義一個指向單精度形的指針變量p2,并為其賦初值,使其指向事先聲明的一維數組,即變量p中存儲著一位數組的首地址。pointer_1=100;pointer_1為指針變量,100位整數11指針變量的引用方式inti=10;int*p_i;p_i=&i;printf(“通過指針來操縱數據,顯示變量i的值:%d”,*p_i);1000H10iP_i通過指針來操縱數據,顯示變量i的值:101000H12指針變量的引用方式inti;int*p_i;p_i=&i;*p=123;printf(“變量i的值:%d\n指針所指向的值:%d\n”,i,*p);指針變量一旦聲明賦初值后,就可以替代它所指向的變量。1000H123iP_i通過指針來操縱數據,顯示變量i的值:1231000Hinti;int*p_i;p_i=&i;*p=123;printf(“變量i的值:%d\n指針所指向的值:%d\n”,i,*p);指針變量一旦聲明賦初值后,就可以替代它所指向的變量。123iP_i13
指向數組元素的指針指針變量指向數組元素,即某一元素的地址放到一個指針變量中inta[10];//定義a為包含10個整形數據的數組int*p; //定義p為指向整型變量的指針變量p=&a[0];//把a[0]元素的地址賦給指針變量p,也就是說,p指向a數組的第0號元素14指向數組的指針在聲明數組時,實際上是聲明了一個指針,這個指針保存了一個連續(xù)空間的首地址,這個指針就是數組名和普通指針不一樣的一點在于,數組名中保存的地址是恒定不變的,而普通的指針變量中保存的地址是可以改變的inta[10];int*p=a;intx;p=&x;inta[10],b[10];a=b;1000HaP1000H01……52342000Hx2000H15指向數組的指針的移動指針變量p已指向數組中的一個元素
則可以通過指針自加來訪問數組中的其它元素:p+1指向同一個數組中的下一個元素。
inta[10];int*p=a;intx=*(p+2)例如數組元素是實型,每個元素占4個字節(jié),則p+1所代表的地址實際上是p+1*d,d是一個數組元素所占據的字節(jié)數1000Ha01……52342000HP1000HP+2x*(p+5)=*(a+5)=a[5]16指向字符串的指針第一種方法是給指針變量賦初值的方式,格式為“*指針變量=字符串常量”
第二種方法是先定義一個字符型指針變量,然后再賦值的方式,其格式為“指針變量=字符串常量”。char*p=“ABCDE”char*p;p=“ABCD”1000H匿名P1000HA B……\0CDE17指向數組的指針示例判斷所輸入的字符串是否是數字字符串
#include"stdafx.h"#include"string.h"voidmain(){ char*p1="0123456789"; chara[100];/*指針p2指向數組中第一個元素的首地址,也可寫成char*p=a效果是一樣的,只是含義有所不同,代碼中指針式指向數組中元素的,而char*p=a是指向數組的。*/char*p2=&a[0];/*設標志位初值0,代表不為數字。*/ charflag='0'; printf("請輸入待處理的字符串\n"); gets(a);18指向數組的指針示例while(*p2!='\0')//p2指針所指向的數組中的元素是否為字符串結束標記{while(*p1!='\0')//p1指針所指向的數組中的元素是否為字符串結束標記
{/*如果兩個指針所指向的元素相同,即輸入字符串中的當前元素為數字,那么跳出內層循環(huán),讀取下一個待比較的元素*/if(*p2==*p1){ flag='1';break;}p1++;//p1指針移動到下一個元素
}if(flag=='0') break;p2++;//p2指針移動到下一個元素19指向數組的指針示例} if(flag=='1') printf("所輸入的字符串為純數字串"); else printf("所輸入的字符串不是純數字串");}20指向數組的指針示例輸入n個單精度數存入一維數組,用指針變量處理數組元素的方式將其逆序存放后輸出。N從鍵盤輸入。#include"stdafx.h"voidmain(){ floata[20],x,*pb,*pe; intn,k,i; scanf("%d",&n); pb=a; for(i=0;i<n;i++) scanf("%f",pb++);//通過移動指針完成數組a元素的賦值
k=n/2;//設置需要交換的最大下標21指向數組的指針示例for(i=0,pb=a,pe=a+n-1;i<k;i++,pb++,pe--)/*pe指向數組中最后一個有效元素,a+n-1中a代表數組首地址,n-1即為從0開始到n-1共n個
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 贛南師范大學《臨床藥學》2023-2024學年第一學期期末試卷
- 《淺談虛擬機》課件
- 上半年教職工政治理論學習個人工作參考計劃范文
- 《公共心理學》課件
- 管理實務培訓課件
- 常德特色美術課件小學生
- 2021年中藥基礎知識考試題庫
- 《最佳治療寶寶濕疹》課件
- 消息編寫培訓課件
- 《拉曼光纖放大器》課件
- 水上交通安全生產培訓
- 廣東省(廣州市)職業(yè)技能鑒定申請表-模板
- 超聲影像學基礎
- 基礎會計(第六版) 課件 第6-9章 會計賬簿-會計核算程序
- 本田凌派說明書
- 原有建筑保護施工方案范本
- 土地整治投標方案(完整技術標)
- 銷售訂單評審表
- 某煤礦潰倉事故專項安全風險辨識評估報告示例
- 《光是如何傳播的》說課稿
- 【幼兒園班本課程研究文獻綜述4100字(論文)】
評論
0/150
提交評論