亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C++ > 正文

C++中指針的數據類型和運算相關知識小結

2020-01-26 14:52:42
字體:
來源:轉載
供稿:網友

C++有關指針的數據類型和指針運算的小結
前面已用過一些指針運算(如p++,p+i等),現在把全部的指針運算列出如下。

1) 指針變量加/減 一個整數
例如:p++,p--,p+i,p-i,p+-i,p-=i等。

C++規定,一個指針變量加/減一個整數是將該指針變量的原值(是一個地址)和它指向的變量所占用的內存單元字節數相加或相減。如p+i代表這樣的地址計算:p+i*d,d為p所指向的變量單元所占用的字節數。這樣才能保證p+i指向p下面的第i個元素。

2) 指針變量賦值
將一個變量地址賦給一個指針變量。如:

 p=&a; //將變量a的地址賦給p p=array; //將數組array首元素的地址賦給p p=&array[i]; //將數組array第i個元素的地址賦給p p=max; //max為已定義的函數,將max的入口地址賦給p p1=p2; //p1和p2都是同類型的指針變量,將p2的值賦給p1

3) 指針變量可以有空值,即該指針變量不指向任何變量,可以這樣表示:

 p=NULL;


實際上NULL代表整數0,也就是使p指向地址為0的單元。這樣可以使指針不指向任何有效的單元。實際上系統已先定義了NULL:

 #define NULL 0


在iostream頭文件中就包括了以上的NULL定義,NULL是一個符號常量。應注意,p的值等于NULL和p未被賦值是兩個不同的概念。

任何指針變量或地址都可以與NULL作相等或不相等的比較,如:

 if(p==NULL) p=p1;

4) 兩個指針變量可以相減
如果兩個指針變量指向同一個數組的元素,則兩個指針變量值之差是兩個指針之間的元素個數,見圖6.25。

假如p1指向a[1],p2指向a[4],則p2-p1=(a+4)-(a+1)=4-1=3,但p1+p2并無實際意義。

5) 兩個指針變量比較
若兩個指針指向同一個數組的元素,則可以進行比較。指向前面的元素的指針變量小于指向后面元素的指針變量。如圖6.25中,p1<p2,或者說,表達式“p1<p2”的值為真,而“p2<p1”的值為假。注意,如果p1和p2不指向同一數組則比較無意義。


6) 對指針變量的賦值應注意類型問題
在本章前幾節中介紹了指針的基本概念和初步應用。應該說明,指針是C和C++中重要的概念,是C和C++的一個特色。使用指針的優點是:
提高程序效率;
在調用函數時,如果改變被調用函數中某些變量的值,這些值能為主調函數使用,即可以通過函數的調用,得到多個可改變的值;
可以實現動態存儲分配。

但是同時應該看到,指針使用實在太靈活,對熟練的程序人員來說,可以利用它編寫出頗有特色的、質量優良的程序,實現許多用其他高級語言難以實現的功能,但也十分容易出錯,而且這種錯誤往往難以發現。

C++指針數組和指向指針的指針
指針數組的概念

如果一個數組,其元素均為指針類型數據,該數組稱為指針數組,也就是說,指針數組中的每一個元素相當于一個指針變量,它的值都是地址。一維指針數組的定義形式為:
    類型名 *數組名[數組長度];
例如:

 int *p[4];


可以用指針數組中各個元素分別指向若干個字符串,使字符串處理更加方便靈活。

【例】若干字符串按字母順序(由小到大)輸出。

#include <iostream>using namespace std;int main( ){ void sort(char *name[],int n); //聲明函數 void print(char *name[],int n); //聲明函數 char *name[]={"BASIC","FORTRAN","C++","Pascal","COBOL"}; //定義指針數組 int n=5; sort(name,n); print(name,n); return 0;}void sort(char *name[],int n){ char *temp; int i,j,k; for(i=0;i<n-1;i++) {  k=i;  for(j=i+1;j<n;j++)   if(strcmp(name[k],name[j])>0) k=j;  if(k!=i)  {   temp=name[i];name[i]=name[k];name[k]=temp;  } }}void print(char *name[],int n){ int i; for(i=0;i<n;i++)  cout<<name[i]<<endl;}

運行結果為:

BASICCOBOLC++FORTRANPascal


print函數的作用是輸出各字符串。name[0]~name[4]分別是各字符串的首地址。print函數也可改寫為以下形式:

void print(char *name[],int n){ int i=0 char *p; p=name[0]; while(i<n) {  p=*(name+i++);  cout<<p<<endl; }}

其中“*(name+i++)”表示先求*(name+i)的值,即name[i](它是一個地址)。將它賦給p,然后i加1。最后輸出以p地址開始的字符串。
指向指針的指針

在掌握了指針數組的概念的基礎上,下面介紹指向指針數據的指針,簡稱為指向指針的指針。從圖6.22可以看到,name是一個指針數組,它的每一個元素是一個指針型數據(其值為地址),分別指向不同的字符串。數組名name代表該指針數組首元素的地址。name+i是name[i]的地址。由于name[i]的值是地址(即指針),因此name+i就是指向指針型數據的指針。還可以設置一個指針變量p,它指向指針數組的元素(見圖)。p就是指向指針型數據的指針變量。

怎樣定義一個指向指針數據的指針變量呢?如下:

 char *(*p);


從附錄B可以知道,*運算符的結合性是從右到左,因此“char *(*p);”可寫成:

 char **p;

【例】指向字符型數據的指針變量。

#include <iostream>using namespace std;int main( ){ char **p; //定義指向字符指針數據的指針變量p char *name[]={"BASIC","FORTRAN","C++","Pascal","COBOL"}; p=name+2; //見圖6.23中p的指向 cout<<*p<<endl; //輸出name[2]指向的字符串 cout<<**p<<endl; //輸出name[2]指向的字符串中的第一個字符}

運行結果為:

C++C


指針數組的元素也可以不指向字符串,而指向整型數據或單精度型數據等。

在本章開頭已經提到了“間接訪問”一個變量的方式。利用指針變量訪問另一個變量就是“間接訪問”。如果在一個指針變量中存放一個目標變量的地址,這就是“單級間址”,見圖6.24(a)。指向指針的指針用的是“二級間址”方法。見下圖。從理論上說,間址方法可以延伸到更多的級,見下圖。但實際上在程序中很少有超過二級間址的。



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产国语刺激对白av不卡| 亚洲a区在线视频| 秋霞成人午夜鲁丝一区二区三区| 久久天天躁狠狠躁夜夜躁| 国产精品白丝av嫩草影院| 69久久夜色精品国产7777| 久久久久久久久久亚洲| 动漫精品一区二区| 欧美日韩免费一区| 午夜欧美不卡精品aaaaa| 国产一区二区视频在线观看| 国产成人精品电影| 亚洲精品日韩丝袜精品| 色哟哟入口国产精品| 欧美极品xxxx| 欧美日韩亚洲视频| 国产精品久久久久久久久久99| 国产成+人+综合+亚洲欧洲| 欧美激情一区二区三级高清视频| 欧美精品videofree1080p| 日韩电影在线观看永久视频免费网站| 国产精品丝袜白浆摸在线| 亚洲无限av看| 欧美超级免费视 在线| 在线色欧美三级视频| 国产精品美女主播在线观看纯欲| 亚洲国产精品yw在线观看| 久久久国产精品免费| 日本韩国欧美精品大片卡二| 日韩视频―中文字幕| 欧美成人网在线| 欧美在线观看网站| 日韩高清a**址| 久久乐国产精品| 国产亚洲精品激情久久| 亚洲精品久久久久久久久| 伊人久久综合97精品| 日韩欧美一区二区三区久久| 国产一区二区三区欧美| 91热福利电影| 国产精品99久久久久久人| 欧美一级电影免费在线观看| 欧美丰满少妇xxxxx做受| 欧美一区二区三区艳史| 美乳少妇欧美精品| 欧美激情亚洲另类| 日韩精品在线私人| 欧美一区二区色| 欧美精品videosex牲欧美| 成人免费网站在线看| 日本高清+成人网在线观看| 日本久久亚洲电影| 国产精品成av人在线视午夜片| 最新中文字幕亚洲| 国产精品美女av| 亚洲变态欧美另类捆绑| 国产国产精品人在线视| 午夜伦理精品一区| 亚洲性av在线| 国产盗摄xxxx视频xxx69| 蜜臀久久99精品久久久久久宅男| 亚洲欧美资源在线| 亚洲精品久久久久久下一站| 亚洲欧美日韩综合| 亚洲一级黄色片| 亚洲欧美日韩另类| 国产视频一区在线| 国产日韩欧美影视| 亚洲国产精品久久精品怡红院| 一区二区三区四区在线观看视频| 久久中文精品视频| 国产91精品高潮白浆喷水| 九九九久久久久久| 亚洲国产欧美一区二区三区同亚洲| 欧美激情欧美激情在线五月| 亚洲最大福利网| 亚洲精品成人久久| 日韩成人激情视频| 成人性生交大片免费看小说| 国内精品久久久久| 亚洲免费视频在线观看| 丁香五六月婷婷久久激情| 亚洲精品久久久久| 福利二区91精品bt7086| 一个人看的www久久| 亚洲人成网在线播放| 在线观看久久久久久| 国产精品极品美女粉嫩高清在线| 亚洲天堂免费在线| 国内精品久久久久影院优| 在线观看亚洲视频| 操人视频在线观看欧美| 久久视频免费在线播放| 日韩小视频在线观看| 91色琪琪电影亚洲精品久久| 成人免费淫片视频软件| 欧美日韩成人精品| 成人av色在线观看| 精品亚洲一区二区三区四区五区| 欧美视频专区一二在线观看| 久久久成人精品视频| 久久久国产一区二区三区| 亚洲成人在线视频播放| 国产成人av在线| 亚洲激情在线视频| 欧美在线视频观看| 日本午夜在线亚洲.国产| www.亚洲人.com| 国产免费一区二区三区在线能观看| 欧美一级淫片videoshd| 国产欧美日韩精品丝袜高跟鞋| 日韩电影中文字幕一区| 久久成人精品视频| 青青草成人在线| 色婷婷综合久久久久中文字幕1| 日本精品性网站在线观看| 亚洲欧美激情另类校园| 91天堂在线观看| 国产亚洲精品久久久| 社区色欧美激情 | 在线观看日韩视频| 欧美久久久精品| 日本最新高清不卡中文字幕| 欧美日韩第一页| 日韩欧美亚洲成人| 精品国产欧美成人夜夜嗨| 在线色欧美三级视频| 欧美亚洲国产视频小说| 欧美激情亚洲一区| 久久久亚洲精选| 精品电影在线观看| 亚洲人在线观看| 久久久久久久久中文字幕| 久久成人人人人精品欧| 日韩精品免费在线视频观看| 国产精品视频导航| 欧美日韩免费在线| 成人在线中文字幕| 91沈先生作品| www.欧美视频| 亚洲色图美腿丝袜| 成人网欧美在线视频| 国产精品视频男人的天堂| 国产精品狼人色视频一区| 日韩美女激情视频| 国产精品综合久久久| 97久久伊人激情网| 国产亚洲视频在线观看| 黄色一区二区在线| 亚洲欧洲一区二区三区在线观看| 97不卡在线视频| 2019最新中文字幕| 精品动漫一区二区三区| 亚洲在线免费看| 欧美成人免费全部观看天天性色| 成人天堂噜噜噜| 久久精品男人天堂| 亚洲欧美日韩精品久久| 欧美成人免费全部观看天天性色| 91亚洲午夜在线| 性欧美xxxx| 欧美成人h版在线观看| 国产精品久久久久久网站| 欧美中文字幕在线|