999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

C語言程序設計指針操作分析與研究

2020-10-10 01:44:28
魅力中國 2020年32期

(貴州城市職業學院,貴州 貴陽 550025)

指針是C語言程序學習的重點和難點,對程序設計人員來說熟練掌握指針并應用于程序設計非常有必要。程序設計中正確應用指針可以提高程序的執行效率,能夠快速實現動態數組的建立,能夠高效地處理字符串等數據。

一、指針的定義

指針是C語言程序設計中一個重要的概念,指針是一種與普通變量不同的特殊的變量,普通變量主要用來存儲程序運算時需要處理的數據或值,而指針則是內存單元地址。在程序設計過程中我們對指針的內存單元地址不感興趣,感興趣的是這個內存單元地址所存儲的變量或函數,即指針所指向的變量或函數。這個過程如同客戶點菜時,吸引客戶的不是菜單,而是菜單所“指向”的菜。要注意的是指針和指針變量之間的差別,所謂指針就是存儲單元地址號,指針變量則是一個能夠存儲地址值的變量,它可以通過存儲指針變量的地址值間接地訪問指針變量所指向的變量值[1]。

二、指針的操作與問題分析

C程序中指針可以指向數據類型中的所有類型,如普通、結構、函數等,指針甚至可以實現指向指針,指針的操作使用與其所指向的數據類型有關。例如指向數值型的指針能夠進行加減乘除相關數學運算,指向字符串型指針可以完成字符串的輸入、輸出,指向結構體的指針可以訪問結構體內字段數據,指向函數的指針是函數調用的接口。在指針的操作使用過程中要注意以下幾點:

(一)定義指針時需要做初始化,如果指針指向的數據還沒有明確,可以初始化為0或NULL。如果只定義指針而不做初始化容易破壞系統數據和引起系統故障。例如:int *p;*p=10;

p是一個指針變量,在沒有明確地址指向的時候即附值10,當把10附值給p時,就可能會覆蓋原來的信息,甚至破壞系統。因此,在給指針附值時需要做地址指向初始化,正確的代碼為:

Int b,*p;p=&b;*p=10;或者改為int *p;p=(int *)malloc(sizeof(int));*p=10;

(二)字符指針使用錯誤

C語言中不可以定義字符串變量,字符串的處理與應用可以借助字符數組或字符指針來完成。字符數組或字符指針在處理字符串時有區別:應用字符數組處理字符串時,系統為字符串數據分配固定連續的存儲空間,數據名即該存儲空間的首地址;使用字符指針管理字符串時,系統不會為字符指針分配存儲空間,而僅是系統中一個隨機的地址值。如:

Char *s1,s2[60];scanf(“%s”,s1);s2=”abcdefghijk”;

輸入語句scanf(“%s”,s1)雖然格式正確,但可能會導致s1中的信息丟失;s2=”abcdefghijk”附值語句中s2是數組名,是一個指針常量,代表數組的首地址,其值不能改變,直接附值錯誤。因而,正確的代碼應為:Char*s1,s2[20];s1=(char *)malloc(60);scanf(“%s”,s1);strcpy(s2,”abcdef gh”);或者改為:char s1[60],*s2;scanf(“%s”,s1);s2=”abcdefgh”;

在處理字符串時字符指針能夠直接指向字符串常量的首地址,但字符數組則不行。

(三)當指針指向數組類型數據時,指針能夠替換數組名使用。如下代碼:

int b[3]={1,2,3};int *p=b則p[0]、p[1]、p[2]與b[0]、b[1]、b[2]對應值相同。

(四)指針能夠實現受限制的加減運算

C語言指針完成自加或自減時與普通數值型變量有區別,在進行自加或自減運算時必須保證指針進行加減運算后結果仍有意義。當C語言指針指向數組后,指針的加減運算變得有意義,進行自加運算時指針指向數組中的下一元素;進行自減運算時指針指向數組中的上一元素。如果指向相同數組的兩指針進行相減,即地址大的減地址小的,結果則是兩個指針間數組元素的個數[2]。

批量處理相同的數據可以運用數組來實現,定義數組后數組中的每個元素均可以作為單獨的指針常量來使用。

(五)形參指針調用缺少地址,如下程序:

上述代碼能正常編譯和執行,但運行結果沒有實現交換a與b的值,這是因為形參為指針,實參調用時必須為對應的地址。可以將調用函數改為:s(int *x,int *y),系統編譯時若主調函數沒有按要求傳送地址則報錯,上述修改可以避免調用時未傳送地址值錯誤。

(六)一維二維數組名的正確使用

C語言中一維和二維數組名均表示數組元素的首地址。但二者有區別,一維數組表示的是所有元素中第一個元素的首地址,二維數組表示的是第0行的首地址,在程序設計時要注意區別,如下程序:

程序能通過編譯和執行,但結果不對,問題出現在把二維數組a的行地址傳給了指標p,指針指向行但不指向元素,因此,不能輸出數組值。可將for(p=a;p

上例說明a是數組第0行的首地址,*a是數組第0行第0列元素的首地址[3]。

(七)動態空間分配函數的應用

應用動態空間分配函數malloc()分配系統內存空間時易出錯,如下程序:

上述代碼編譯通過,但概念不正確,malloc(8)附值指針p前,編譯程序假定了該返回值為整數,但指針p不能被理想的作為整數看待,需要對空間分配成功與否作出提前判定[4]。

三、結束語

指針是C語言程序設計中一種重要的數據類型,其在C語言程序設計中具有十分重要的作用和地位,通過指針的使用,可以很容易的處理復雜的數據結構,設計出高效率的程序。當然,C語言程序設計指針難以理解、易出錯,只有在實踐中不斷總結學習經驗,才能更好的應用C語言指針,才能設計出高質量的程序。

主站蜘蛛池模板: 亚洲三级片在线看| 99热这里只有精品2| 国产精品无码一二三视频| 在线看片免费人成视久网下载| 成人在线不卡视频| 国产区91| 成人午夜在线播放| 国产香蕉国产精品偷在线观看| 国产午夜一级淫片| 最新国产精品鲁鲁免费视频| AV无码一区二区三区四区| 日韩精品资源| 成年看免费观看视频拍拍| 国产第一页免费浮力影院| 国产精品女在线观看| h网址在线观看| 免费看一级毛片波多结衣| 欧美国产综合色视频| 国产在线自乱拍播放| 欧美精品高清| 午夜老司机永久免费看片| 成人日韩欧美| 午夜老司机永久免费看片| 激情视频综合网| 小蝌蚪亚洲精品国产| 好吊日免费视频| 亚洲人成网站18禁动漫无码| 国产jizzjizz视频| 18禁不卡免费网站| 国产一级做美女做受视频| av午夜福利一片免费看| 国产美女人喷水在线观看| 久久不卡精品| 3344在线观看无码| 欧美精品一区在线看| 欧美三級片黃色三級片黃色1| 婷婷亚洲最大| 久久免费观看视频| 伊人久热这里只有精品视频99| 青青草原国产一区二区| AV无码无在线观看免费| 久久午夜夜伦鲁鲁片不卡| 国产熟女一级毛片| 91美女视频在线| 99热这里只有免费国产精品 | 亚洲人成影院在线观看| 99热这里只有精品在线播放| 激情网址在线观看| 伊人蕉久影院| 亚洲欧美日韩成人高清在线一区| 夜精品a一区二区三区| 亚洲一区二区三区麻豆| 精品亚洲欧美中文字幕在线看| 国产在线精彩视频二区| 国产精品视频导航| 亚洲最新网址| 夜夜操国产| 亚洲精品无码在线播放网站| 国产欧美在线观看一区| 小说 亚洲 无码 精品| 精品一区二区三区水蜜桃| 亚洲第一黄片大全| 成年人福利视频| 亚洲天天更新| 亚洲综合色吧| 日韩欧美亚洲国产成人综合| 男女男免费视频网站国产| 中文字幕日韩久久综合影院| 亚洲乱亚洲乱妇24p| 国产综合精品日本亚洲777| 亚洲AV免费一区二区三区| 尤物成AV人片在线观看| 日韩乱码免费一区二区三区| 国产视频大全| 国产成人无码综合亚洲日韩不卡| 久久国产V一级毛多内射| 99精品高清在线播放| 日本免费福利视频| 亚洲黄网在线| 午夜精品久久久久久久99热下载| 亚洲无码A视频在线| 国产成人夜色91|