




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第5章嵌入式LinuxC程序設計基礎學習內容指針的基本應用(1)指針的基本概念(2)指針的定義和初始化方法利用指針訪問某個變量(1)利用指針訪問變量(2)利用指針訪問一維數組(3)指針變量作為函數參數(4)利用指針訪問字符數組與字符串1.指針與指針變量
指針即地址,是一個常量。
指針變量(變量的指針)是一種專門存放其它變量在內存中的地址的變量,它的值是變量的地址(不是變量的值!)。2.指針變量的定義和初始化(1)指針的定義: 類型*指針變量名(int*p;)類型可以是int、float、char等數據類型,表示該指針變量可以指向的變量的類型。(2)指針變量初始化:p=&a;將a的地址賦值給p,使p指向a。指針的定義3.“&”和“*”運算符“&”為取地址符,取出某個變量在內存中的地址。“*”為指針運算符,也稱取內容符,用來取出指針變量所指向的變量的值。如:p=&a;既可以直接通過變量名a訪問,也可以通過*p來訪問變量a的值,只是尋址方式不同。通過a取變量的值叫直接(訪問)尋址,即直接按變量地址來存取變量內容。通過先取出指針變量的值,再按照該值來存取它所指向的變量的方式叫間接(訪問)尋址。使用指針計算圓的面積
【任務描述】使用指針,從鍵盤輸入圓的半徑r的值,并使用指針計算圓的面積s。
【任務分析】1.定義指針變量先定義兩個float類型的變量半徑r和面積s,再定義兩個指針變量pr和ps,分別指向變量r與變量。2.數據計算用pr從鍵盤接收用戶輸入的半徑,用*pr間接訪問變量r的值。利用圓面積公式進行計算,并將計算結果賦值給*ps,以改變變量s的值。再通過*ps或s輸出圓的面積。#include<stdio.h>#definePI3.14voidmain(){floatr,s;float*pr,*ps;pr=&r;ps=&s;printf("請輸入圓的半徑(單位為厘米):");scanf("%f",pr);*ps=PI*(*pr)*(*pr);printf("----------------------------------------\n");printf("面積s的值為%.2f平方厘米\n",*ps);}1、從鍵盤輸入兩個整數,存放在a和b兩個變量中,然后按先大后小的順序輸出a和b。練習1.指向數組的指針數組的指針(指向數組的指針)指數組在內存中的起始地址,數組元素的指針是數組元素的地址。
如:inta[10];int*pa; pa=a;
或:pa=&a[0];注意:pa是變量,a、&a[0]是常量指向數組的指針思考:什么是指針數組?2.指針的移動對于指向數組的指針變量,可以加上或減去一個整數n,即把指針向前或向后移動n個位置。設pa是指向數組a的指針變量,則pa+n,pa-n,pa++,++pa,pa--,--pa運算都是合法的。3.指針的比較指向同一數組的兩個指針變量進行關系運算,可表示它們所指向的數組元素之間的關系。例如:pa1==pa2表示pa1和pa2指向同一數組元素;pa1>pa2表示pa1處于高地址位置;pa1<pa2表示pa2處于低地址位置。4.指針訪問一維數組可用下標法、數組名地址法、指針法三種方法來訪問數組元素:(1)下標法:用a[i]引用數組a中的第i個元素。(2)數組名地址法:用*(a+i)或*(p+i)訪問數組中第i個元素。(3)指針法:*p取值之后,p移動,如p指向a[0],則p=p+1之后,p指向a[1]。5.指針作為函數的參數函數定義和調用可用指針變量作形參或實參,調用時采用指針變量作實參,地址傳遞,調用后數組內容發生改變。練習【技能訓練】1.已知一個整型數組a[5]={52,18,37,48,26},要求編寫一個程序,分別用下標法和指針法輸出一維數組的每一個元素的取值。2.已知有一個整形數組a如下:inta[]={12,5,8,19,22,-4,66,-17,28,13}編寫一個程序,功能是找出該數組中的最小元素和最大元素,將最小元素與數組首元素交換,最大元素與數組尾交換。打印出數組元素原先的取值和最終交換后的取值。【應用拓展】已知一個整型數組a[10]={13,6,8,17,10,7,30,12,9,11}。要求編寫一個程序,利用指向數組的指針,計算數組中所有元素之和;利用指向數組的指針作參數,對數組排序、輸出。猜數游戲
【任務描述】由電腦隨機出現1、2、3(三個數不重復),但順序不確定。用戶猜這三個數的順序,猜中一個數,獎勵免費游歡樂世界門票一張,猜中三個數,獎勵NBA球星科比冠名球衣一件。一個都沒有猜中,向用戶表示遺憾。1.數據存儲數組computerNum[3]存儲隨機產生的3個數,數組caiNum[3]存儲用戶所猜的3個數,用變量flag標記猜中數字個數。2.數據處理函數swap(int*q)將指針q所指向的數組中元素隨機調換位置。具體思路:將三個數存入數組中,隨機產生一個數,確定需要交換的元素位置,多次隨機交換位置,生成一組隨機數。由用戶依次從鍵盤中輸入1,2,3三個數字存入caiNum[3]中,逐個比較caiNum[3]和數組computerNum[3]中的元素,將猜對的次數記錄在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}; /*存儲電腦生成的隨機數*/ intcaiNum[3]; /*存儲用戶猜的數*/ intflag=0; /*標記猜中數字的個數*/ inti, *puterNum; /*使p指向數組computerNum*/ printf("******歡迎進入我猜我猜我猜猜猜游戲*********\n"); swap(p); printf("請分別輸入1-3中不重復的三個數:\n"); for(i=0;i<3;i++) { printf("第%d個數:",i+1); scanf("%d",&caiNum[i]);//可寫成scanf("%d",caiNum+i) if(*(caiNum+i)==*(computerNum+i)) { flag++; } }
printf("電腦隨機數分別是:");for(i=0;i<3;i++)printf("%d",*(p++));/*用指針變量自加自減的方式進行移動*/
switch(flag) { case0: printf("\n很遺憾,你沒猜中,請繼續加油哦!\n"); break; case1: printf("\n猜中%d個數,獎勵游歡樂世界門票一張!\n",flag); break; case3: printf("\n猜中%d個數,獎勵NBA球星球衣一件!\n",flag); }}【程序思考】1、項目中printf(“%d”,*(p++))能不能寫成printf(“%d”,*(computerNum++));?2、for(i=0;i<3;i++) printf("%d",*(p++));
同樣的功能,寫成下面的方式可以嗎?還有沒有其他的方式?for(puterNum;p<computerNum+3;p++){ printf("%d",*p); }1、字符串的表示形式(1)用字符數組存放一個字符串,然后輸出該字符串。 charas[12]="department";(2)用字符指針指向一個字符串。 char*p="computer";2、字符串的使用strcmp()、strlen()、strcpy()等函數中的參數使用字符數組名,也可以使用字符指針變量來代替字符數組名。指針指向字符串【任務描述】輸入一個英文句子時很容易將每個單詞首字母寫成大寫,如將“Iloveprogramming!”寫成“ILoveProgramming!”。能否編程序實現將“ILoveProgramming!”轉換成規范形式“Iloveprogramming!”。(用指針實現)指向字符串的指針應用【任務分析】本項目的程序設計思路是:利用指針對字符串中的每一個字符進行遍歷,并逐個判斷,如果這個字符的前一個字符為空格,且它本身又是大寫,則需要轉換為相應的小寫字母。#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);}【程序說明】1.isspace()可用于判斷某字符是不是空格,是返回1,不是返回0,isupper()用于判斷該字符是否是大寫字母,是返回1,不是返回0。2.*(wrong+i)是利用數組名加上一個整數的方法來訪問wrong[i]這個數組元素的。通過i的不斷變化,實現對字符串的遍歷。3.注意i的初值應設為1,不是0。因為英文句子第一單詞的第一個字母要求大寫。【應用拓展】1.利用指針編寫一個可以將英語句子所有字母轉換成大寫字母的程序。2.從鍵盤輸入兩個字符串,利用字符指針比較兩個字符串的大小。3.如果一個字符串正過來讀和倒過來讀是一樣的,那么這個字符串就被稱作回文串。請編寫一個程序,判斷字符串"MADAM"是否是回文串。1.用指針指向數組時,既可用下標法,也可用指針法。⑴若p是指向一維數組a的指針,a[i]可表示為*(p+i)、p[i],也可表示為*(a+i),&a[i]、p+i、a+i則表示元素的地址。⑵對于一個M×N的二維數組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.數組元素為指針類型的數組稱為指針數組,指針數組中的每一個元素都是指針變量,引入指針數組的主要目的是為了提高對多個字符串操作時的方便性和靈活性,尤其適合于長度不等的字符串的處理。語法小結指針的簡單綜合應用指向結構變量的指針一個指針變量指向一個結構變量時,稱為結構指針變量。結構指針變量中的值是所指向的結構變量的首地址。結構指針變量說明的一般形式為:struct結構名*結構指針變量名定義結構指針變量時可以如下表示:structCard*selected_card;訪問的一般形式為:(*結構指針變量).成員名或:結構指針變量->成員名如:printf("%c%c",cards[i].kind,cards[i].val);等價于:printf("%c%c",(*(cards+i)).k
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 電商物流在農產品銷售中的應用試題及答案
- 筑施工安全新規學習試題及答案
- 教師對教案設計的反思與分析試題及答案
- 掌握2025樂理考試成功關鍵點的高效途徑試題及答案
- 小學教師教學反思與改進能力的測試
- 婦幼崗前測試題及答案
- 游戲開發筆試題及答案
- 教育科研能力提升的反思試題及答案
- 簽證知識測試題及答案
- 英語初一月考試卷及答案
- GA/T 751-2024公安視頻圖像屏幕顯示信息疊加規范
- 2025至2030中國長鏈氯化石蠟行業供需現狀與前景策略研究報告
- 租地蓋大棚合同協議
- 自體輸血知識培訓課件
- 人教A版高一下冊必修第二冊高中數學8.6.2直線與平面垂直【課件】
- 小學生涯課件
- 西藏拉薩中學2024-2025學年高三第二學期英語試題4月月考試卷含解析
- GB/T 45421-2025城市公共設施非物流用智能儲物柜服務規范
- 檔案相關法律法規知識復習試題及答案
- 漢語方言與地方文化認同的關系研究論文
- 西北四省(陜西山西青海寧夏)2025屆高三下學期第一次聯考數學試卷含答案
評論
0/150
提交評論