第5章嵌入式linux c程序設(shè)計(jì)基礎(chǔ)指針_第1頁(yè)
第5章嵌入式linux c程序設(shè)計(jì)基礎(chǔ)指針_第2頁(yè)
第5章嵌入式linux c程序設(shè)計(jì)基礎(chǔ)指針_第3頁(yè)
第5章嵌入式linux c程序設(shè)計(jì)基礎(chǔ)指針_第4頁(yè)
第5章嵌入式linux c程序設(shè)計(jì)基礎(chǔ)指針_第5頁(yè)
已閱讀5頁(yè),還剩26頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第5章嵌入式LinuxC程序設(shè)計(jì)基礎(chǔ)學(xué)習(xí)內(nèi)容指針的基本應(yīng)用(1)指針的基本概念(2)指針的定義和初始化方法利用指針訪問(wèn)某個(gè)變量(1)利用指針訪問(wèn)變量(2)利用指針訪問(wèn)一維數(shù)組(3)指針變量作為函數(shù)參數(shù)(4)利用指針訪問(wèn)字符數(shù)組與字符串1.指針與指針變量

指針即地址,是一個(gè)常量。

指針變量(變量的指針)是一種專門(mén)存放其它變量在內(nèi)存中的地址的變量,它的值是變量的地址(不是變量的值?。?。2.指針變量的定義和初始化(1)指針的定義: 類型*指針變量名(int*p;)類型可以是int、float、char等數(shù)據(jù)類型,表示該指針變量可以指向的變量的類型。(2)指針變量初始化:p=&a;將a的地址賦值給p,使p指向a。指針的定義3.“&”和“*”運(yùn)算符“&”為取地址符,取出某個(gè)變量在內(nèi)存中的地址?!?”為指針運(yùn)算符,也稱取內(nèi)容符,用來(lái)取出指針變量所指向的變量的值。如:p=&a;既可以直接通過(guò)變量名a訪問(wèn),也可以通過(guò)*p來(lái)訪問(wèn)變量a的值,只是尋址方式不同。通過(guò)a取變量的值叫直接(訪問(wèn))尋址,即直接按變量地址來(lái)存取變量?jī)?nèi)容。通過(guò)先取出指針變量的值,再按照該值來(lái)存取它所指向的變量的方式叫間接(訪問(wèn))尋址。使用指針計(jì)算圓的面積

【任務(wù)描述】使用指針,從鍵盤(pán)輸入圓的半徑r的值,并使用指針計(jì)算圓的面積s。

【任務(wù)分析】1.定義指針變量先定義兩個(gè)float類型的變量半徑r和面積s,再定義兩個(gè)指針變量pr和ps,分別指向變量r與變量。2.數(shù)據(jù)計(jì)算用pr從鍵盤(pán)接收用戶輸入的半徑,用*pr間接訪問(wèn)變量r的值。利用圓面積公式進(jìn)行計(jì)算,并將計(jì)算結(jié)果賦值給*ps,以改變變量s的值。再通過(guò)*ps或s輸出圓的面積。#include<stdio.h>#definePI3.14voidmain(){floatr,s;float*pr,*ps;pr=&r;ps=&s;printf("請(qǐng)輸入圓的半徑(單位為厘米):");scanf("%f",pr);*ps=PI*(*pr)*(*pr);printf("----------------------------------------\n");printf("面積s的值為%.2f平方厘米\n",*ps);}1、從鍵盤(pán)輸入兩個(gè)整數(shù),存放在a和b兩個(gè)變量中,然后按先大后小的順序輸出a和b。練習(xí)1.指向數(shù)組的指針數(shù)組的指針(指向數(shù)組的指針)指數(shù)組在內(nèi)存中的起始地址,數(shù)組元素的指針是數(shù)組元素的地址。

如:inta[10];int*pa; pa=a;

或:pa=&a[0];注意:pa是變量,a、&a[0]是常量指向數(shù)組的指針?biāo)伎迹菏裁词侵羔様?shù)組?2.指針的移動(dòng)對(duì)于指向數(shù)組的指針變量,可以加上或減去一個(gè)整數(shù)n,即把指針向前或向后移動(dòng)n個(gè)位置。設(shè)pa是指向數(shù)組a的指針變量,則pa+n,pa-n,pa++,++pa,pa--,--pa運(yùn)算都是合法的。3.指針的比較指向同一數(shù)組的兩個(gè)指針變量進(jìn)行關(guān)系運(yùn)算,可表示它們所指向的數(shù)組元素之間的關(guān)系。例如:pa1==pa2表示pa1和pa2指向同一數(shù)組元素;pa1>pa2表示pa1處于高地址位置;pa1<pa2表示pa2處于低地址位置。4.指針訪問(wèn)一維數(shù)組可用下標(biāo)法、數(shù)組名地址法、指針?lè)ㄈN方法來(lái)訪問(wèn)數(shù)組元素:(1)下標(biāo)法:用a[i]引用數(shù)組a中的第i個(gè)元素。(2)數(shù)組名地址法:用*(a+i)或*(p+i)訪問(wèn)數(shù)組中第i個(gè)元素。(3)指針?lè)ǎ?p取值之后,p移動(dòng),如p指向a[0],則p=p+1之后,p指向a[1]。5.指針作為函數(shù)的參數(shù)函數(shù)定義和調(diào)用可用指針變量作形參或?qū)崊?,調(diào)用時(shí)采用指針變量作實(shí)參,地址傳遞,調(diào)用后數(shù)組內(nèi)容發(fā)生改變。練習(xí)【技能訓(xùn)練】1.已知一個(gè)整型數(shù)組a[5]={52,18,37,48,26},要求編寫(xiě)一個(gè)程序,分別用下標(biāo)法和指針?lè)ㄝ敵鲆痪S數(shù)組的每一個(gè)元素的取值。2.已知有一個(gè)整形數(shù)組a如下:inta[]={12,5,8,19,22,-4,66,-17,28,13}編寫(xiě)一個(gè)程序,功能是找出該數(shù)組中的最小元素和最大元素,將最小元素與數(shù)組首元素交換,最大元素與數(shù)組尾交換。打印出數(shù)組元素原先的取值和最終交換后的取值。【應(yīng)用拓展】已知一個(gè)整型數(shù)組a[10]={13,6,8,17,10,7,30,12,9,11}。要求編寫(xiě)一個(gè)程序,利用指向數(shù)組的指針,計(jì)算數(shù)組中所有元素之和;利用指向數(shù)組的指針作參數(shù),對(duì)數(shù)組排序、輸出。猜數(shù)游戲

【任務(wù)描述】由電腦隨機(jī)出現(xiàn)1、2、3(三個(gè)數(shù)不重復(fù)),但順序不確定。用戶猜這三個(gè)數(shù)的順序,猜中一個(gè)數(shù),獎(jiǎng)勵(lì)免費(fèi)游歡樂(lè)世界門(mén)票一張,猜中三個(gè)數(shù),獎(jiǎng)勵(lì)NBA球星科比冠名球衣一件。一個(gè)都沒(méi)有猜中,向用戶表示遺憾。1.數(shù)據(jù)存儲(chǔ)數(shù)組computerNum[3]存儲(chǔ)隨機(jī)產(chǎn)生的3個(gè)數(shù),數(shù)組caiNum[3]存儲(chǔ)用戶所猜的3個(gè)數(shù),用變量flag標(biāo)記猜中數(shù)字個(gè)數(shù)。2.數(shù)據(jù)處理函數(shù)swap(int*q)將指針q所指向的數(shù)組中元素隨機(jī)調(diào)換位置。具體思路:將三個(gè)數(shù)存入數(shù)組中,隨機(jī)產(chǎn)生一個(gè)數(shù),確定需要交換的元素位置,多次隨機(jī)交換位置,生成一組隨機(jī)數(shù)。由用戶依次從鍵盤(pán)中輸入1,2,3三個(gè)數(shù)字存入caiNum[3]中,逐個(gè)比較caiNum[3]和數(shù)組computerNum[3]中的元素,將猜對(duì)的次數(shù)記錄在flag變量中。#include"stdio.h"#include"stdlib.h"#include"time.h"voidswap(int*q){ inti,j,t,*p=q; srand(time(0)); for(i=0;i<5;i++) { j=rand()%3+0; t=*(p+j);*(p+j)=*p;*p=t; }}voidmain(){ intcomputerNum[3]={1,2,3}; /*存儲(chǔ)電腦生成的隨機(jī)數(shù)*/ intcaiNum[3]; /*存儲(chǔ)用戶猜的數(shù)*/ intflag=0; /*標(biāo)記猜中數(shù)字的個(gè)數(shù)*/ inti, *puterNum; /*使p指向數(shù)組computerNum*/ printf("******歡迎進(jìn)入我猜我猜我猜猜猜游戲*********\n"); swap(p); printf("請(qǐng)分別輸入1-3中不重復(fù)的三個(gè)數(shù):\n"); for(i=0;i<3;i++) { printf("第%d個(gè)數(shù):",i+1); scanf("%d",&caiNum[i]);//可寫(xiě)成scanf("%d",caiNum+i) if(*(caiNum+i)==*(computerNum+i)) { flag++; } }

printf("電腦隨機(jī)數(shù)分別是:");for(i=0;i<3;i++)printf("%d",*(p++));/*用指針變量自加自減的方式進(jìn)行移動(dòng)*/

switch(flag) { case0: printf("\n很遺憾,你沒(méi)猜中,請(qǐng)繼續(xù)加油哦!\n"); break; case1: printf("\n猜中%d個(gè)數(shù),獎(jiǎng)勵(lì)游歡樂(lè)世界門(mén)票一張!\n",flag); break; case3: printf("\n猜中%d個(gè)數(shù),獎(jiǎng)勵(lì)NBA球星球衣一件!\n",flag); }}【程序思考】1、項(xiàng)目中printf(“%d”,*(p++))能不能寫(xiě)成printf(“%d”,*(computerNum++));?2、for(i=0;i<3;i++) printf("%d",*(p++));

同樣的功能,寫(xiě)成下面的方式可以嗎?還有沒(méi)有其他的方式?for(puterNum;p<computerNum+3;p++){ printf("%d",*p); }1、字符串的表示形式(1)用字符數(shù)組存放一個(gè)字符串,然后輸出該字符串。 charas[12]="department";(2)用字符指針指向一個(gè)字符串。 char*p="computer";2、字符串的使用strcmp()、strlen()、strcpy()等函數(shù)中的參數(shù)使用字符數(shù)組名,也可以使用字符指針變量來(lái)代替字符數(shù)組名。指針指向字符串【任務(wù)描述】輸入一個(gè)英文句子時(shí)很容易將每個(gè)單詞首字母寫(xiě)成大寫(xiě),如將“Iloveprogramming!”寫(xiě)成“ILoveProgramming!”。能否編程序?qū)崿F(xiàn)將“ILoveProgramming!”轉(zhuǎn)換成規(guī)范形式“Iloveprogramming!”。(用指針實(shí)現(xiàn))指向字符串的指針應(yīng)用【任務(wù)分析】本項(xiàng)目的程序設(shè)計(jì)思路是:利用指針對(duì)字符串中的每一個(gè)字符進(jìn)行遍歷,并逐個(gè)判斷,如果這個(gè)字符的前一個(gè)字符為空格,且它本身又是大寫(xiě),則需要轉(zhuǎn)換為相應(yīng)的小寫(xiě)字母。#include"stdio.h"#include"ctype.h"voidmain(){ charwrong[19]="ILoveProgramming"; inti; for(i=1;*(wrong+i)!='\0';i++){ if(isspace(*(wrong+i-1))&&isupper(*(wrong+i))) *(wrong+i)=tolower(*(wrong+i)); } printf("%s\n",wrong);}【程序說(shuō)明】1.isspace()可用于判斷某字符是不是空格,是返回1,不是返回0,isupper()用于判斷該字符是否是大寫(xiě)字母,是返回1,不是返回0。2.*(wrong+i)是利用數(shù)組名加上一個(gè)整數(shù)的方法來(lái)訪問(wèn)wrong[i]這個(gè)數(shù)組元素的。通過(guò)i的不斷變化,實(shí)現(xiàn)對(duì)字符串的遍歷。3.注意i的初值應(yīng)設(shè)為1,不是0。因?yàn)橛⑽木渥拥谝粏卧~的第一個(gè)字母要求大寫(xiě)?!緫?yīng)用拓展】1.利用指針編寫(xiě)一個(gè)可以將英語(yǔ)句子所有字母轉(zhuǎn)換成大寫(xiě)字母的程序。2.從鍵盤(pán)輸入兩個(gè)字符串,利用字符指針比較兩個(gè)字符串的大小。3.如果一個(gè)字符串正過(guò)來(lái)讀和倒過(guò)來(lái)讀是一樣的,那么這個(gè)字符串就被稱作回文串。請(qǐng)編寫(xiě)一個(gè)程序,判斷字符串"MADAM"是否是回文串。1.用指針指向數(shù)組時(shí),既可用下標(biāo)法,也可用指針?lè)ā"湃魀是指向一維數(shù)組a的指針,a[i]可表示為*(p+i)、p[i],也可表示為*(a+i),&a[i]、p+i、a+i則表示元素的地址。⑵對(duì)于一個(gè)M×N的二維數(shù)組a,若p是指向a[0]的指針,a[i][j]可表示為*(p+i*N+j)、p[i*N+j],也可表示為*(*(a+i)+j),該元素的地址:&a[i][j]、p+i*N+j、*(a+i)+j。2.?dāng)?shù)組元素為指針類型的數(shù)組稱為指針數(shù)組,指針數(shù)組中的每一個(gè)元素都是指針變量,引入指針數(shù)組的主要目的是為了提高對(duì)多個(gè)字符串操作時(shí)的方便性和靈活性,尤其適合于長(zhǎng)度不等的字符串的處理。語(yǔ)法小結(jié)指針的簡(jiǎn)單綜合應(yīng)用指向結(jié)構(gòu)變量的指針一個(gè)指針變量指向一個(gè)結(jié)構(gòu)變量時(shí),稱為結(jié)構(gòu)指針變量。結(jié)構(gòu)指針變量中的值是所指向的結(jié)構(gòu)變量的首地址。結(jié)構(gòu)指針變量說(shuō)明的一般形式為:struct結(jié)構(gòu)名*結(jié)構(gòu)指針變量名定義結(jié)構(gòu)指針變量時(shí)可以如下表示:structCard*selected_card;訪問(wèn)的一般形式為:(*結(jié)構(gòu)指針變量).成員名或:結(jié)構(gòu)指針變量->成員名如:printf("%c%c",cards[i].kind,cards[i].val);等價(jià)于:printf("%c%c",(*(cards+i)).k

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論