最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++中指針的數(shù)據(jù)類型和運(yùn)算相關(guān)知識(shí)小結(jié)

 更新時(shí)間:2015年09月14日 17:22:45   投稿:goldensun  
這篇文章主要介紹了C++中指針的數(shù)據(jù)類型和運(yùn)算相關(guān)知識(shí)小結(jié),是C++入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下

C++有關(guān)指針的數(shù)據(jù)類型和指針運(yùn)算的小結(jié)
前面已用過一些指針運(yùn)算(如p++,p+i等),現(xiàn)在把全部的指針運(yùn)算列出如下。

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

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

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

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

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

 p=NULL;


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

 #define NULL 0


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

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

 if(p==NULL) p=p1;

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

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

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


6) 對(duì)指針變量的賦值應(yīng)注意類型問題
在本章前幾節(jié)中介紹了指針的基本概念和初步應(yīng)用。應(yīng)該說明,指針是C和C++中重要的概念,是C和C++的一個(gè)特色。使用指針的優(yōu)點(diǎn)是:
提高程序效率;
在調(diào)用函數(shù)時(shí),如果改變被調(diào)用函數(shù)中某些變量的值,這些值能為主調(diào)函數(shù)使用,即可以通過函數(shù)的調(diào)用,得到多個(gè)可改變的值;
可以實(shí)現(xiàn)動(dòng)態(tài)存儲(chǔ)分配。

但是同時(shí)應(yīng)該看到,指針使用實(shí)在太靈活,對(duì)熟練的程序人員來說,可以利用它編寫出頗有特色的、質(zhì)量?jī)?yōu)良的程序,實(shí)現(xiàn)許多用其他高級(jí)語言難以實(shí)現(xiàn)的功能,但也十分容易出錯(cuò),而且這種錯(cuò)誤往往難以發(fā)現(xiàn)。

C++指針數(shù)組和指向指針的指針
指針數(shù)組的概念

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

 int *p[4];


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

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

#include <iostream>
using namespace std;
int main( )
{
 void sort(char *name[],int n); //聲明函數(shù)
 void print(char *name[],int n); //聲明函數(shù)
 char *name[]={"BASIC","FORTRAN","C++","Pascal","COBOL"}; //定義指針數(shù)組
 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;
}

運(yùn)行結(jié)果為:

BASIC
COBOL
C++
FORTRAN
Pascal


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

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](它是一個(gè)地址)。將它賦給p,然后i加1。最后輸出以p地址開始的字符串。
指向指針的指針

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

怎樣定義一個(gè)指向指針數(shù)據(jù)的指針變量呢?如下:

 char *(*p);


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

 char **p;

【例】指向字符型數(shù)據(jù)的指針變量。

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

運(yùn)行結(jié)果為:

C++
C


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

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



相關(guān)文章

  • 關(guān)于C++對(duì)象繼承中的內(nèi)存布局示例詳解

    關(guān)于C++對(duì)象繼承中的內(nèi)存布局示例詳解

    這篇文章主要給大家介紹了關(guān)于C++對(duì)象繼承中內(nèi)存布局的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面跟著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-08-08
  • 基于內(nèi)核線程的創(chuàng)建、使用和退出以及延時(shí)宏的補(bǔ)充說明介紹

    基于內(nèi)核線程的創(chuàng)建、使用和退出以及延時(shí)宏的補(bǔ)充說明介紹

    本篇文章是對(duì)內(nèi)核線程的創(chuàng)建、使用和退出以及延時(shí)宏的補(bǔ)充說明介紹進(jìn)行了敘述。需要的朋友參考下
    2013-05-05
  • C語言控制臺(tái)實(shí)現(xiàn)字符飛機(jī)大戰(zhàn)

    C語言控制臺(tái)實(shí)現(xiàn)字符飛機(jī)大戰(zhàn)

    這篇文章主要為大家詳細(xì)介紹了C語言控制臺(tái)實(shí)現(xiàn)字符飛機(jī)大戰(zhàn),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-12-12
  • Microsoft Visual C++ 安裝失敗 0x80070666的問題解決

    Microsoft Visual C++ 安裝失敗 0x80070666的問題解

    本文主要介紹了Microsoft Visual C++ 安裝失敗 0x80070666的問題解決,錯(cuò)誤可能由已安裝其他VisualC++版本、VisualC++安裝異常、Windows更新計(jì)劃安裝同一VisualC++包等原因引起,下面就來介紹一下解決方案,感興趣的可以了解一下
    2025-03-03
  • c++實(shí)現(xiàn)reactor高并發(fā)服務(wù)器的詳細(xì)教程

    c++實(shí)現(xiàn)reactor高并發(fā)服務(wù)器的詳細(xì)教程

    這篇文章主要介紹了c++從零實(shí)現(xiàn)reactor高并發(fā)服務(wù)器,包括環(huán)境準(zhǔn)備和基礎(chǔ)知識(shí)介紹,本文給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧
    2024-03-03
  • Android App仿微信界面切換時(shí)Tab圖標(biāo)變色效果的制作方法

    Android App仿微信界面切換時(shí)Tab圖標(biāo)變色效果的制作方法

    這篇文章主要介紹了Android App仿微信界面切換時(shí)Tab圖標(biāo)變色效果的制作方法,重點(diǎn)講解了圖標(biāo)的繪制技巧,需要的朋友可以參考下
    2016-04-04
  • C++ primer超詳細(xì)講解順序容器

    C++ primer超詳細(xì)講解順序容器

    本文主要介紹了C++順序容器(vector、deque、list)的使用詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • C語言中#define預(yù)處理語法總結(jié)

    C語言中#define預(yù)處理語法總結(jié)

    C語言里可以用#define定義一個(gè)標(biāo)識(shí)符來表示一個(gè)常量。特點(diǎn)是:定義的標(biāo)識(shí)符不占內(nèi)存,只是一個(gè)臨時(shí)的符號(hào),預(yù)編譯后這個(gè)符號(hào)就不存在了,也不做類型定義。預(yù)編譯又叫預(yù)處理
    2021-11-11
  • C++中的繼承問題(繼承基本概念、菱形虛擬繼承的對(duì)象模型)

    C++中的繼承問題(繼承基本概念、菱形虛擬繼承的對(duì)象模型)

    這篇文章主要介紹了C++中的繼承問題(繼承基本概念、菱形虛擬繼承的對(duì)象模型),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • C++中如何實(shí)現(xiàn)回調(diào)的方法示例

    C++中如何實(shí)現(xiàn)回調(diào)的方法示例

    這篇文章主要給大家介紹了關(guān)于C++中如何實(shí)現(xiàn)回調(diào)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用c++具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-10-10

最新評(píng)論

赤壁市| 孝感市| 井研县| 蕲春县| 东海县| 合作市| 贵南县| 诸城市| 潼关县| 上虞市| 通海县| 清河县| 平顶山市| 湘阴县| 天津市| 余干县| 城固县| 蒙城县| 凤凰县| 柞水县| 垣曲县| 抚远县| 高密市| 韶关市| 灵川县| 四子王旗| 巫山县| 松潘县| 大化| 海晏县| 祁连县| 大港区| 平泉县| 阿拉善右旗| 抚顺县| 榆树市| 突泉县| 嘉义县| 哈密市| 辽中县| 黄龙县|