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

C語言中指針運用與探索

2013-12-31 00:00:00許晶
中國科教創新導刊 2013年23期

摘 要:指針變量的運用是C語言程序設計的重要核心部分。程序中的數據在內存中的有效讀取及程序執行效率的提高多數情況取決于是否靈活使用指針。本文旨在探索C語言程序設計實踐過程中如何正確操作指針變量,從而方便操作與之關聯的字符串、數組、函數間數據的傳遞,繼而解決C語言程序設計中的許多實際問題。

關鍵詞:指針變量 數組 字符串 函數 常見問題

中圖分類號:TP312 文獻標識碼:A 文章編號:1673-9795(2013)08(b)-0163-01

指針是C語言中廣泛使用的一種數據類型。運用指針編程是C語言最主要的特點之一。利用指針變量可以表示各種數據結構,也能很方便地使用數組和字符串,更加能像匯編語言一樣處理內存地址,[1]從而編寫出精練而高效的程序。

1 指針變量的使用優勢及常規用法

(1)使用指針指向數組首地址,簡化了數組相關的程序內容的書寫,避免了整體使用數組,在程序執行中減少了先找數組元素的地址再取數組元素內容的過程,直接在數組所在的地址范圍內操作數組元素,提高了程序的執行效率。(2)使用指針指向字符串(即字符數組),把一個字符串整體當作一個數組元素,多個字符串的指針變量就構成了指針數組,不僅節省了內存空間,還大大地提高了程序的執行效率。(3)指向單變量的指針變量作為函數參數,可以在程序執行過程中及時轉向調用函數的入口。節省內存空間的同時,把指針變量替代單變量作為直接變量在調用函數執行過程中執行相應程序操作,免去了返回值的執行時間與過程。(4)指向結構體復合變量的指針變量作為函數參數,可以通過變化結構體變量靈活使用指針變量在調用函數中執行函數的程序操作,不僅節省內存空間與執行時間,而且方便程序變量的修改,提高了程序的可移植性。(5)指向函數的指針變量作為函數的參數,可以在一個主函數中實現多個自定義函數功能間的調用,大大地提高了程序的靈活性與可移植性及程序執行的效率。(6)使用指針指向文件類型結構體,可以找到與之相關的文件,實現文件的訪問,在主函數執行過程中靈活轉向其它文件的執行。

2 指針變量使用常見問題及解決方法的探求

2.1 指針變量的初始化

同其他變量的初始化相似,在指針變量的定義之后就應該給指針變量賦一個初始的地址值。如果沒有給定義的指針變量賦初值的話,指針變量的值不定,可能會導致一些隱藏在某些地址號的內存中的難以跟蹤的漏洞(bug)運行。如:

int *p; *p=100;

p定義為一個指向整型變量的指針變量,但是卻沒有給p賦予一個初始的地址值,只是把一個存儲100的常量的存儲單元的首地址賦給了p,而這個存儲單元的首地址可能在程序其它位置另作它用,就會產生隱形的難以追蹤的bug的運行。因此,為了避免可能性的發生,就要和其他變量的使用一樣,在定義指針變量的時候就要同時給予指針變量一個初值,以確定指針變量的初始的地址,即指針變量的初始化。將上述例子修改為:

int a=100; int *p=a;

還要注意把“int *p=a;”和“*p=a;”混淆,前者是指針變量的初始化語句,即定義的同時給指針變量賦初值,而后者是一個旨意錯誤的賦值語句,把整型變量a的首地址賦給了p所指向的整型變量。

2.2 指針變量的賦值

給指針變量賦予的初值一定是地址。同樣,在程序中給指針變量重新賦予的值也只能是地址或使指針變量指向同類型的變量值的首地址。如:

int a,*p; p=a;

要使p指向a,就要有地址運算符對a取首地址后賦給p,或者把變量取內容賦給p,而不是直接把a賦給p。C語言編譯器會提示指出這是個語法錯誤,給指針變量賦予的內容和指針變量不匹配。正確的賦值一般形式為:

int a,*p; p=a;

或 int a,*p; *p=a;

還要說明的是指針的指向要有具體類型說明。不能給指針賦予與其基類型不符的地址,否則也會出現語法上錯誤。如:

int a=100; double *p; p=a;

在給指針賦值時,不只要求是地址,還要是一個與該指針類型相符的變量或常量的首地址。而上述例子中,a是整型的變量,p是基類型為雙精度型的變量。二者不相匹配,這種賦值在編譯時就會發生語法錯誤。因此,給指針變量的賦值要注意指針變量的基類型,即指針變量能夠指向的變量類型。

2.3 指針在函數之間值的傳遞

#include “stdio.h”

void swap(int *a, int *b)

{int t; t=*a; *a=*b; *b=t;}

void main( )

{int x,y; printf(“請輸入兩個整數:”);

scanf(x,y); printf(“x=%d, y=%d\n”,x,y);

swap(x,y); printf(“x=%d, y=%d\n”,x,y);}

函數間的值傳遞也可以通過實參的地址單向傳遞給形參的指針變量,直接調用函數,完成函數間數據傳遞的目的。主函數main( )在調用函數swap( )的同時,把變量x和y的地址分別單向傳遞給了指針變量a和b。也就是主函數中對整型變量x和y的操作,通過地址的傳遞,雖然在調用函數過程中形式上是對指向整型變量x和y的指針變量a和b的內容(即x和y)的操作,實質上仍然是繼續對整型變量x和y調用函數的操作。也就沒有必要給主函數返回x和y的值了。省去了返回的時間和操作過程,提高了程序的執行效率與正確率。

2.4 指向指針變量的指針變量

*p,**p,***p分別叫做一級指針、二級指針和三級指針。如果這樣定義:

int a, *p, **q, ***r;

則第一個*p中的p可以用來存放普通整型變量的地址,例如賦值:p=a。第二個**q中的q可以用來存放整型變量地址的地址,例如指針變量p的地址,p是指針變量,變量的值是整型變量a的地址,那么p這個指針變量的地址就需要一個比p高一層的指針來存放。因此可以這樣賦值:q=p。第三個***r,道理相同,可以這樣賦值 r=q。指針的嵌套使用,使程序在執行時更靈活,更有效率。

3 指針的使用是C語言程序設計中最重要的一環

能否正確理解和使用指針是我們是否真正掌握C語言的一個標志。C語言中指針的使用比較靈活,很多人在實際編程中很容易出錯,而且這種錯誤恰恰又難以發現,所以建議初學者大量地上機調試程序,以弄清一些細節,并積累經驗,為后續編程內容的學習打好堅實的基礎。同時,指針也是C語言中最為困難的一部分,在學習中除了要正確理解基本概念,還必須要多編程并上機調試。只要做到這些,指針也是不難掌握的。

參考文獻

[1]田淑清.全國計算機等級考試二級教程—— C語言程序設計[M].北京:高等教育出版社,2006.

作者簡介:許晶(1978—),女,滿族,籍貫:山東日照,職務:教師,職稱:講師,研究方向:網絡編程、數據庫技術。

主站蜘蛛池模板: av尤物免费在线观看| 老色鬼久久亚洲AV综合| 视频一区视频二区中文精品| 亚洲热线99精品视频| 亚洲一区二区在线无码| 在线欧美国产| 中文字幕色在线| 波多野结衣一区二区三区四区视频| 色哟哟国产精品| 国产精品高清国产三级囯产AV| 久久这里只精品国产99热8| 国产在线视频欧美亚综合| 2020精品极品国产色在线观看| 一本色道久久88| 国产精品无码一区二区桃花视频| 香蕉eeww99国产在线观看| 国产成人乱无码视频| 香蕉伊思人视频| 国产不卡一级毛片视频| 丁香婷婷激情网| 国产精品福利社| 乱人伦视频中文字幕在线| av一区二区三区高清久久| 国产午夜看片| 日韩国产精品无码一区二区三区| 国产亚洲精品无码专| 国产成人高清在线精品| 日韩人妻精品一区| 囯产av无码片毛片一级| 一级毛片免费不卡在线| 精品无码专区亚洲| 国产资源站| 欧美怡红院视频一区二区三区| 国产精品粉嫩| 麻豆精品在线视频| 手机永久AV在线播放| 色哟哟精品无码网站在线播放视频| 欧美色图第一页| 亚洲人成电影在线播放| 日韩精品免费一线在线观看| 91精品国产无线乱码在线| 91久久夜色精品国产网站| 精品欧美一区二区三区在线| 蜜桃视频一区二区三区| 五月婷婷导航| 狠狠色综合网| 精品福利视频网| 欧美在线伊人| 亚洲欧洲AV一区二区三区| 久久www视频| 91系列在线观看| 免费无码在线观看| 国产凹凸视频在线观看| av在线手机播放| 久久亚洲国产一区二区| 国产精品99r8在线观看| 亚洲欧美在线综合图区| 亚洲日韩每日更新| 免费无码AV片在线观看国产| 精品色综合| 久久中文无码精品| 亚洲国产在一区二区三区| 精品久久久久久久久久久| 国产精品亚洲片在线va| 欧美成人看片一区二区三区| 青青久在线视频免费观看| 一级爆乳无码av| a亚洲视频| 精品视频在线观看你懂的一区| 一本一道波多野结衣av黑人在线| 狠狠色丁香婷婷| 高清免费毛片| 中文字幕2区| 麻豆精品在线视频| 国产成人无码AV在线播放动漫| 91在线国内在线播放老师| 久久久久久久97| 婷婷色丁香综合激情| 人人澡人人爽欧美一区| 偷拍久久网| 欧美日本一区二区三区免费| 91久久偷偷做嫩草影院电|