




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第六章 指針和引用6.1 你覺(jué)得以下程序?qū)@示什么結(jié)果?實(shí)際運(yùn)行以下程序,觀察并解釋為什么出現(xiàn)這樣的結(jié)果。#include <iostream>using namespace stdvoid main() int va1=100;int *pva1=&va1;int *pva2;cout<<pva1<<" "<<*pva1<<endl;cout<<pva2<<" "<<*pva2<<endl;答案:屏幕先顯示指針pva1 的值和指針?biāo)赶虻?/p>
2、整型數(shù):“0x0012FF7C 100”。然后出現(xiàn)錯(cuò)誤信息:“應(yīng)用程序錯(cuò)誤 "0x004010a0"指令引用的"0xcccccccc"內(nèi)存。該內(nèi)存不能為"read"?!痹颍褐羔榩va2 沒(méi)有初始化,其中的地址值0xcccccccc 屬于內(nèi)存中不可以訪問(wèn)的區(qū)域。因此,出現(xiàn)運(yùn)行錯(cuò)誤。6.2 以下程序在VC 環(huán)境下編譯運(yùn)行時(shí),出現(xiàn)什么結(jié)果?#include <iostream>using namespace stdvoid main() int vi=53;int* iPtr=&vi;float* fPtr=&
3、vi;iPtr=fPtr;cout <<vi <<endl<<"iPtr:" << iPtr <<"=>" <<*iPtr <<endl<<"fPtr:" << fPtr <<"=>" <<*fPtr <<endl <<endl;答案:程序在編譯時(shí)出現(xiàn)兩個(gè)錯(cuò)誤,分別在第6 行和第7 行。第6 行的錯(cuò)誤信息是:“error C2440: 'in
4、itializing' : cannot convert from 'int *' to 'float *'Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-stylecast”第7 行的錯(cuò)誤信息是:“error C2440: '=' : cannot convert from 'float *' to 'int *' Typespointed to are unrel
5、ated; conversion requires reinterpret_cast, C-style cast or function-style cast”錯(cuò)誤性質(zhì)都是指針類型的不一致和不能自動(dòng)轉(zhuǎn)換。此習(xí)題說(shuō)明:不同類型的指針是不能互相賦值的。6.3 從鍵盤(pán)輸入三個(gè)整型數(shù)va、vb、vc,通過(guò)一個(gè)指向整型的指針iptr,輸出三個(gè)數(shù)中的最大值。編寫(xiě)相應(yīng)的程序。答案:參考程序如下:#include <iostream>using namespace std;void main() int va,vb,vc;int* iptr;cin>>va>>vb>&
6、gt;vc;if(va>vb) iptr=&va;else iptr=&vb;if(vc>*iptr) iptr=&vc;cout<<"The largest number is "<<*iptr<<endl;6.4 以下程序中調(diào)用了4 次strcpy 函數(shù),請(qǐng)問(wèn)哪些調(diào)用在運(yùn)行時(shí)會(huì)出現(xiàn)錯(cuò)誤?為什么?#include <iostream>using namespace std#include <cstring>void main() char *s1 = "String0
7、1"char *s2 = "String02"char s3 ="String03"char s4 ="String04"strcpy( s1, s2 );cout<<s1<<endl;strcpy( s3, s4 );cout<<s3<<endl;strcpy( s3, s2 );cout<<s3<<endl;strcpy( s1, s4 );cout<<s1<<endl;答案:程序可以通過(guò)編譯,沒(méi)有編譯錯(cuò)誤。但是在運(yùn)行時(shí)會(huì)出現(xiàn)
8、運(yùn)行錯(cuò)誤:“0x00409191 指令引用的0x0042f040 內(nèi)存。該內(nèi)存不能為written?!卞e(cuò)誤是在調(diào)用函數(shù)strcpy( s1, s2 )時(shí)出現(xiàn)的。因?yàn)閟1 是用字符串常量來(lái)初始化的,不可以通過(guò)copy 來(lái)改變常量的內(nèi)容,也就是不可以written。由于程序已經(jīng)中止,另外一處運(yùn)行錯(cuò)誤就沒(méi)有顯示。實(shí)際上在調(diào)用函數(shù)strcpy( s1, s4 )也會(huì)看到類似錯(cuò)誤,原因也是相同的。6.5 編寫(xiě)一個(gè)函數(shù)get_average 整型數(shù)組元素的平均值。要求這個(gè)函數(shù)既可以用來(lái)求一維數(shù)組元素的平均值,也可以求二維數(shù)組元素的平均值。編程實(shí)現(xiàn)這個(gè)函數(shù)。并且在main 函數(shù)中通過(guò)具體的一維數(shù)組Array
9、_1D 和二維數(shù)組Array_2D,測(cè)試這個(gè)函數(shù)。答案:相應(yīng)的函數(shù)和測(cè)試程序如下:#include <iostream>using namespace std;float GetAverage(int *p, int n);void main() int Array_2D34=10,20,30,40,50,60,70,80,90,100,110,120,(*pt)4;int Array_1D=10,20,30,40,50;int j;float average;pt=Array_2D;j=sizeof Array_2D/sizeof *Array_2D; /*a 就是元素a00av
10、erage=GetAverage(*Array_2D,j);cout<<"數(shù)組Array_2D 數(shù)據(jù)的平均值等于:"<<average<<endl;j=sizeof(Array_1D)/sizeof(*Array_1D);average=GetAverage(Array_1D,j);cout<<"數(shù)組Array_1D 數(shù)據(jù)的平均值等于:"<<average<<endl;float GetAverage(int *p, int n) int sum;float average;sum=
11、0;for(int i=0;i<n;i+)sum=sum+*(p+i);average=(float)sum/n;return average;函數(shù)調(diào)用 average=GetAverage(*Array_2D,j); 還可以有多種寫(xiě)法,如:(*pt, 12)(Array_2D0, 12)(&Array_2D00, 12)6.6 以下程序在使用指針時(shí)有沒(méi)有問(wèn)題?運(yùn)行后是否有問(wèn)題?#include <iostream>#include<cstring>using namespace stdvoid main() char *pch;pch = new cha
12、r;strcpy(pch,"Book");cout<<pch<<endl;delete pch;答案:程序在編譯時(shí)沒(méi)有錯(cuò)誤。但是,存在內(nèi)存泄漏問(wèn)題:申請(qǐng)的堆內(nèi)存沒(méi)有釋放。運(yùn)行時(shí)也會(huì)出現(xiàn)錯(cuò)誤。因?yàn)閐elete 語(yǔ)句要釋放的不是堆內(nèi)存的地址:pch 中現(xiàn)在是字符串的地址。這樣的地址不需要通過(guò)delete 釋放,也不可以通過(guò)delete 釋放。6.7 編制程序,調(diào)用指針作為參數(shù)的函數(shù),實(shí)現(xiàn)下面兩字符串變量的交換。char* ap=”hello”;char* bp=”how are you”;交換的結(jié)果為:ap 指向”how are you”,bp 指向”h
13、ello”。答案:簡(jiǎn)單的指針指向的交換,實(shí)際上就是交換指針的地址。程序如下:#include <iostream>#include<cstring>using namespace std;void main() char* ap="hello"char* bp="how are you"char *temp;temp=ap;ap=bp;bp=temp;cout<<ap<<endl;cout<<bp<<endl;6.8 利用格式控制符hex 可以顯示整數(shù)的機(jī)器數(shù)。例如-1 的機(jī)器數(shù)可以
14、顯示為:cout<<hex<<-1<<endl;屏幕將顯示ffffffff,即-1 的補(bǔ)碼。float 型實(shí)數(shù),在機(jī)器內(nèi)以浮點(diǎn)數(shù)的格式存放。利用指針和控制符hex,也可以顯示浮點(diǎn)數(shù)的機(jī)內(nèi)表示。請(qǐng)編程輸出浮點(diǎn)數(shù)1.0 的機(jī)內(nèi)碼。答案:浮點(diǎn)數(shù)在機(jī)器內(nèi)以浮點(diǎn)小數(shù)表示。先定義一個(gè)浮點(diǎn)數(shù)f=-1。用一個(gè)指針fPtr 指向這個(gè)浮點(diǎn)數(shù)。將這個(gè)地址再結(jié)果類型轉(zhuǎn)換,強(qiáng)制地賦值給一個(gè)整型指針。指針?biāo)傅膬?nèi)容不變。但是已經(jīng)可以按16 進(jìn)制的形式顯示內(nèi)存中的二進(jìn)制數(shù)。程序如下:#include <iostream>using namespace std;void mai
15、n(int argc, char *argv) int a=-1;cout<<hex<<a<<endl;float f=1.0;float* fPtr=&f; /浮點(diǎn)指針int* iPtr=(int*)&f; /浮點(diǎn)變量地址賦給整型指針cout <<f <<endl<<"iPtr:" << iPtr <<"=>" <<*iPtr <<"=>"<<hex<<*iPtr
16、<<endl<<"fPtr:" << fPtr <<"=>" <<*fPtr <<endl ;6.9 定義一個(gè)字符型的指針數(shù)組StrArray4,每個(gè)元素指向一個(gè)字符串。請(qǐng)通過(guò)鍵盤(pán)輸入一首詩(shī),數(shù)組的每個(gè)成員指向一行詩(shī)。最后通過(guò)這個(gè)數(shù)組,輸出這首詩(shī)。提示:需要首先為每個(gè)指針成員分配堆內(nèi)存,最后,還要?jiǎng)h除所申請(qǐng)的空間。答案:程序如下:#include <iostream>#include <stdlib.h>using namespace std;const
17、 int NUM=4;void main()char *strNUM; / 定義一個(gè)字符型的指針數(shù)組int t;/ 為數(shù)組中的每個(gè)指針?lè)峙鋬?nèi)存for(t=0; t<NUM; t+)if(!(strt=new char28)cout<<"申請(qǐng)動(dòng)態(tài)內(nèi)存不成功.n"exit(1);/ 在分配的內(nèi)存中存放字符串if(t!=NUM-1) cout<<"輸入第"<<t+1<<"句詩(shī):"<<endl;else cout<<"輸入最后一句詩(shī):"<&
18、lt;endl;cin>>strt;/ 輸出字符串cout<<"輸入的詩(shī)句是:"<<endl;for(t=0; t<NUM; t+)cout<<strt<<endl;/ 釋放內(nèi)存free(strt);6.10 編程實(shí)現(xiàn)字符數(shù)組的反序輸出。數(shù)組的反序和數(shù)組的輸出都要通過(guò)函數(shù)來(lái)實(shí)現(xiàn)。函數(shù)的實(shí)參數(shù)包括數(shù)組名,形參包括指向字符的指針。主函數(shù)中定義一個(gè)數(shù)組,調(diào)用兩個(gè)函數(shù),完成數(shù)組的反序和數(shù)組的輸出。答案:假定字符數(shù)組中存放的是字符串,經(jīng)過(guò)函數(shù)調(diào)用后實(shí)現(xiàn)字符串的反序輸出。在首先字符串反序時(shí),不需要將字符串的結(jié)束標(biāo)志0 改
19、變位置。也就是說(shuō),傳遞給進(jìn)行反序操作的函數(shù)的參數(shù)中,數(shù)組的長(zhǎng)度不需要計(jì)入0。以下程序中,數(shù)組的輸出沒(méi)有通過(guò)函數(shù)實(shí)現(xiàn)。讀者可以自己來(lái)完成這一項(xiàng)任務(wù)。程序如下:#include <iostream>using namespace std;void inv(char *x, int n);void main()int i,n;char array = "abcdefgh"n=sizeof(array)/sizeof(*array);cout<<"原始數(shù)組是:n"for(i=0; i<n-1; i+)cout<<arrayi;cout<<"n"inv(array, n-1);cout<<"按相反次序存放后的數(shù)組為:n"for(i=0; i<n-1; i+)cout<<arrayi;cout<&
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 關(guān)于酒店轉(zhuǎn)讓合同范本
- 2025年GPPS項(xiàng)目建議書(shū)
- 買車預(yù)售合同范本
- 合同范例專用條款
- 個(gè)人演出勞務(wù)合同范例
- 攤位出兌合同范本
- 賣家解除合同范本
- 取送車合同范本
- 2025年特種用途鋼絲及鋼絲繩項(xiàng)目合作計(jì)劃書(shū)
- 籃球場(chǎng)地租賃合同范本
- 物業(yè)公司市場(chǎng)拓展全員營(yíng)銷激勵(lì)方案
- 2024-2025學(xué)年小學(xué)美術(shù)一年級(jí)下冊(cè)(2024)嶺南版(2024)教學(xué)設(shè)計(jì)合集
- 2024-2025學(xué)年初中信息技術(shù)(信息科技)七年級(jí)下冊(cè)甘教版教學(xué)設(shè)計(jì)合集
- 2024年安徽省文化和旅游行業(yè)職業(yè)技能大賽(導(dǎo)游賽項(xiàng))考試題庫(kù)(含答案)
- SOAP病例書(shū)寫(xiě)規(guī)范
- 小學(xué)一年級(jí)綜合實(shí)踐活動(dòng)第四單元課件《書(shū)包》
- DB13-T 6002-2024 應(yīng)急科普教育場(chǎng)館建設(shè)規(guī)范
- 2025屆高三數(shù)學(xué)一輪總復(fù)習(xí) 第二章 第一講 函數(shù)的概念及其表示
- 全國(guó)職業(yè)院校技能大賽高職組(軟件測(cè)試賽項(xiàng))備賽試題庫(kù)(含答案)
- 四川甘孜州招聘康定市投資發(fā)展集團(tuán)有限公司招聘筆試題庫(kù)2024
- 2024年甘肅省中考物理試題卷(含答案解析)
評(píng)論
0/150
提交評(píng)論