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无码一区二区三区四区| 色综合天天操| 青青久久91| 国产主播福利在线观看| 免费人欧美成又黄又爽的视频 | 国产精品视频久| 91精品国产自产在线观看| 国产AV无码专区亚洲A∨毛片| 久草热视频在线| 黄色福利在线| 国产精品一区在线麻豆| 久99久热只有精品国产15| 精品夜恋影院亚洲欧洲| 成人无码一区二区三区视频在线观看 | 精品久久人人爽人人玩人人妻| 四虎亚洲国产成人久久精品| 久久久久亚洲av成人网人人软件| 国产精品手机在线观看你懂的| 五月天久久综合| 久996视频精品免费观看| 欧美亚洲欧美区| 青青草综合网| 高清码无在线看| 国产乱人伦AV在线A| 亚洲精品欧美日本中文字幕| 永久成人无码激情视频免费| 四虎影视8848永久精品| 国产日韩欧美在线视频免费观看| 国产福利在线免费观看| 亚洲欧洲日产无码AV| 美女视频黄频a免费高清不卡| 免费不卡视频| 日韩人妻少妇一区二区| 欧美精品伊人久久| 久久男人视频| 国产丝袜第一页| 久久精品国产国语对白| 国产白丝av| 久久精品中文无码资源站| 国产真实乱子伦精品视手机观看| 亚洲黄网视频| 国产精品专区第1页| 亚洲成人在线网| www.youjizz.com久久| 亚洲无码电影| 九九九精品成人免费视频7| 日韩人妻无码制服丝袜视频| 久久综合国产乱子免费| 精品乱码久久久久久久| 麻豆精品视频在线原创| 在线观看免费黄色网址| 在线不卡免费视频| 欧美一级在线播放| 欧美精品成人| 精品精品国产高清A毛片| 四虎成人在线视频| 亚洲国产亚综合在线区| 久久99国产视频| 熟妇人妻无乱码中文字幕真矢织江 | 亚洲国产日韩欧美在线| 无码中文字幕乱码免费2| 国产一级毛片yw| 亚洲成aⅴ人片在线影院八| 在线高清亚洲精品二区| 99热在线只有精品| 中文字幕精品一区二区三区视频| 国产伦片中文免费观看| 亚洲AV无码乱码在线观看代蜜桃| 欧美色视频在线| www亚洲天堂| 91精品国产一区| 久久福利片| 久久精品最新免费国产成人| 欧美a级完整在线观看| 久久大香伊蕉在人线观看热2| 高清久久精品亚洲日韩Av|