日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++指针类型介绍

發(fā)布時間:2025/3/20 c/c++ 14 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++指针类型介绍 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1 int i; //定義一個int型的變量

  2 int *p; //定義一個指向int的指針

  3 int a[n]; //定義一個數(shù)組

  4 int *p[n]; //定義一個指針數(shù)組

  5 int (*p)[n]; //定義一個數(shù)組指針

  6 int f(); //聲明一個返回值為int的函數(shù)

  7 int *p(); //聲明一個返回值為int*的函數(shù)

  8 int (*p)(); //定義一個函數(shù)指針

  9 int **p; //定義一個指向int的指針的指針

  &引用運算符:

  1.引用只是變量的別名,而不是指向變量的指針(區(qū)別于取址運算符"&")不占內(nèi)存空間,對變量引用的改變其相應的變量也會改變。

  2.不能對引用使用指針間接運算符“*”進行復引用操作

  3.引用必須在聲明時初始化 int &c = count;(c是count的別名)

  指針的算術(shù)操作

  和整數(shù)的加法,減法,自身的增量、減量

  指針增量后指向下一個與指針基類同型的元素,增減單位是所指類型的長度。

  同類型直接賦值,異類型要進行轉(zhuǎn)換。

  強制轉(zhuǎn)換:可以把表達式結(jié)果硬性轉(zhuǎn)換為指定類型

  char * p;(int *)p 把p強制轉(zhuǎn)換為int型,記住轉(zhuǎn)換過程中要注意兩個類型的大小,大轉(zhuǎn)小時可能會有數(shù)據(jù)丟失(如int到double)

  涉及void *的:

  c 中void *類型可賦值給任何類型的指針,反之亦然

  c++ 中都需要強制轉(zhuǎn)換

  void * 可似為無窮大能接納任何類型賦值,反之不行int * p =9;void * t= p(正確);p=t(錯誤)

  const 是“最靠近”為原則

  指向整數(shù)常量的指針:const int * p;它所指向的值只讀不能被修改 *p = 4(錯誤),p = 5(正確)

  指向一個整數(shù)的常量指針:int * const p;不允許修改指針變量的值,*p = 5 (正確),p = 5 (錯誤)

  指針優(yōu)點:

  1.為函數(shù)提供修改調(diào)用變元的手段;

  2.支持C++動態(tài)分配子程序

  3.可以改善某些子程序的效率

  4.為動態(tài)數(shù)據(jù)結(jié)構(gòu)(如二叉樹、鏈表)提供支持

  注:指針為程序引入了一層間接性,可以操控指針而不直接操控對象。

  1.可操控指針內(nèi)含的地址也可操控指針所指的對象2.指針可能并不指向任何對象,寫*pi時,可能會使程序在執(zhí)行期錯誤,如尋址到某個對象,則提領(lǐng)操作,不指向任何對象,會出錯,所以在提領(lǐng)前先確定它的確指向某對象。

  一個未指向任何對象的指針,內(nèi)含地址為0,有時稱為null指針,assert (p != 0)可檢測是否分配成功。也可用if (pi),只有在pi含非零值時,才為true.

  引用和指針的比較(1)引用在創(chuàng)建的同時必須初始化,即引用到一個有效的對象;而指針在定義的時候不必初始化,可以在定義后面的任何地方重新賦值。

  (2)不存在NULL引用,引用必須與合法的存儲單元關(guān)聯(lián);而指針則可以是NULL.

  (3)引用一旦被初始化為指向一個對象,它就不能被改變?yōu)榱硪粋€對象的引用;而指針在任何時候都可以改變?yōu)橹赶蛄硪粋€對象。給引用賦值并不是改變它和原始對象的綁定關(guān)系。

  (4)引用的創(chuàng)建和銷毀并不會調(diào)用類的拷貝構(gòu)造函數(shù)

  (5)在語言層面,引用的用法和對象一樣;在二進制層面,引用一般都是通過指針來實現(xiàn)的,只不過編譯器幫我們完成了轉(zhuǎn)換。

  總的來說:引用既具有指針的效率,又具有變量使用的方便性和直觀性。







C++數(shù)組速學
1.一維數(shù)組的定義與初始化

1.1定義一維數(shù)組

int a[3];

該定義表示一個整型數(shù)組,共有3個元素,下標分別為[0],[1],[2]。

1.2一維數(shù)組初始化

可以用下面幾種方式進行初始化。

①在定義數(shù)組時分別對數(shù)組元素賦初值。

int a[3]={0,1,2};

②只給一部分元素賦值。

int a[3]={0,1};

這表示只給前面兩個元素賦初值,后面的元素值默認為0。

③在對全部數(shù)組元素賦初值時,可以不指定數(shù)組長度。

int a[3]={0,1,2};

可以寫成

int a[]={0,1,2};

在第二種寫法中,花括號中有3個元素,系統(tǒng)就會據(jù)此自動定義a數(shù)組的長度為3。但若被定義的數(shù)組長度與提供初值的個數(shù)不相同,則數(shù)組長度不能省略。

2.二維數(shù)組的定義與初始化

2.1定義二維數(shù)組

int a[3][4];

改定義表示一個3x4(3行4列)的整型數(shù)組。可以把該二維數(shù)組看作:

|---a[0]:a[0][0],a[0][1],a[0][2],a[0][3]

a |--a[1] :a[1][0],a[1][1],a[1][2],a[1][3]

|--a[2] :a[2][0],a[2][1],a[2][2],a[2][3]

C++中,二維數(shù)組種元素排列的順序是:按行存放,即在內(nèi)存中先順序存放第一行的元素,在存放第二行元素,依次往下。

2.2二維數(shù)組初始化

可以用下面幾種方式進行初始化。

①分行給二維數(shù)組賦初值。

int a[3][4]={{0,1,2,3},{4,5,6,7},{8,9,10,11}};

②將所有數(shù)據(jù)寫在一個花括號內(nèi),按數(shù)組排列的順序?qū)Ω髟刭x初值。

int a[3][4]={0,1,2,3,4,5,6,7,8,9,10,11};

③只對部分元素賦初值。

int a[3][4]={{1},{2},{4}};

1 0 0 0

2 0 0 0

4 0 0 0

int a[3][4]={{1},{0,2},{0,0,4}};

1 0 0 0

0 2 0 0

0 0 4 0

int a[3][4]={{1},{3,2}};

1 0 0 0

3 2 0 0

0 0 0 0

int a[3][4]={{1},{},{9}};

1 0 0 0

0 0 0 0

9 0 0 0

④如果對全部元素賦初值,則定義數(shù)組時對第一維長度可以不指定,但第二維長度必須指定。

int a[3][4]={0,1,2,3,4,5,6,7,8,9,10,11};

可以寫成

int a[][4]={0,1,2,3,4,5,6,7,8,9,10,11};

在定義時也可以對部分元素賦初值而省略第一維的長度,但應分行賦初值。

int a[][4]={{0,0,1},{},{0,9}};

0 0 1 0

0 0 0 0

0 9 0 0

3.用數(shù)組名作函數(shù)參數(shù)

3.1一維數(shù)組名作函數(shù)參數(shù)

數(shù)組名代表數(shù)組首元素的地址,并不代表數(shù)組中的全部元素。因此用數(shù)組名作函數(shù)參數(shù)時,是將實參數(shù)組首元素的地址傳遞給形參。形參可以是數(shù)組名,也可以是指針變量,它們用來接收實參傳來的地址。如果形參是數(shù)組名,它代表的是形參數(shù)組首元素的地址。

在調(diào)用函數(shù)時,將實參數(shù)組首元素的地址傳遞給形參數(shù)組名。這樣,實參數(shù)組和形參數(shù)組共占同一段內(nèi)存單元。形參數(shù)組中各元素的值如果發(fā)生變化就意味著實參數(shù)組元素的值發(fā)生變化。這一點區(qū)別于變量作函數(shù)參數(shù)的情況。在變量作函數(shù)參數(shù)時,只能將實參變量的值傳遞給形參變量,在調(diào)用函數(shù)過程中如果改變了形參的值,對實參沒有影響,即實參的值不因形參的值的改變而改變。

實際上,聲明形參數(shù)組并不意味著真正建立一個包含若干元素的數(shù)組,在調(diào)用函數(shù)時也不對它分配內(nèi)存單元,只是用array[]這樣的形式表示array是一維數(shù)組名,以接受實參傳來的地址。因此array[]中方括號內(nèi)的數(shù)值并無實際作用,編譯系統(tǒng)對一維數(shù)組方括號內(nèi)的內(nèi)容不予處理。函數(shù)定義中的形參數(shù)組可以寫元素個數(shù),也可以不寫。

以下幾種寫法都是正確的。

void select_sort(int array[10],int n){…}

void select_sort(int array[],int n){…}

void select_sort(int array[5],int n){…}

C++實際上只把形參數(shù)組名作為一個指針變量來處理,用來接收從實參傳過來的地址。

3.2二維數(shù)組名作函數(shù)參數(shù)

如果是二維數(shù)組名作為實參和形參,在對形參數(shù)組聲明時,必須指定第二維(列)的大小,且應與實參的第二維的大小相同。第一維的大小可以指定,也可以不指定。

下面兩種寫法都是正確的。

void max_value(int array[3][4]{…}

void max_value(int array[][4]){…}

不能把第二維的大小省略是因為,二維數(shù)組是由若干個一維數(shù)組組成的,在內(nèi)存中數(shù)組是按行存放的,因此在定義二維數(shù)組時必須指定列數(shù)。假如一個二維數(shù)組有12個元素,可以是2x6,3x4,4x3,等不同的形式,如果指定了列數(shù)有4,則只有一種形式3x4。

形參數(shù)組的列(第二維)定義必須與實參數(shù)組的列(第二維)定義相同,但行(第一維)定義可以不同。

//實參

int array[3][4]

//形參

int array[3][4]

int array[8][4]

4.字符數(shù)組

4.1字符數(shù)組的定義與初始化

可以這樣定義:

char c[10];

c[0]='I';c[1]=' ';c[2]='a';c[3]='m';c[4]=' ';

c[5]='h';c[6]='a';c[7]='p';c[8]='p';c[9]='y';

也可以:

char c1[10]={'I',' ','a','m',' ','h','a','p','p','y'};

如果花括號提供的初始個數(shù)(即字符個數(shù))大于數(shù)組長度,則按語法錯誤處理。如果初值個數(shù)小于數(shù)組長度,則只將這些字符賦給數(shù)組中前面的元素,其余的元素自動定為空字符(即’’)。

如果提供的初值個數(shù)與預定的數(shù)組長度相同,在定義時可以省略數(shù)組長度,系統(tǒng)會自動根據(jù)初值個數(shù)確定數(shù)組長度。如,

char c1[]={'I',' ','a','m',' ','h','a','p','p','y'};

數(shù)組c的長度自動設定為10。

4.2字符數(shù)組的賦值與引用

只能對字符數(shù)組的元素賦值,而不能用賦值語句對整個數(shù)組賦值。

char c[5];

c={'C','H','I','N','A'};//error

c[0]='C';c[1]='H';c[2]='I';c[3]='N';c[4]='A';//ok

如果已定義了a和b是具有相同類型和長度的數(shù)組,且b數(shù)組已被初始化,

a=b;//error

a[0]=b[0];//ok

4.3 字符串和字符串結(jié)束標志

對于,

char str[12]={'I',' ','a','m',' ','h','a','p','p','y'};

字符串str只有10個字符,所以系統(tǒng)會對字符數(shù)組最后兩位自動填補’’,這是“字符串結(jié)束標志”。在上面的數(shù)組中,第11個字符為’’,就表明字符串的有效字符為其前面的10個字符。也就是說,遇到字符’’就表示字符串就此結(jié)束。

對一個字符串常量,系統(tǒng)會自動在所有字符的后面加一個’’作為結(jié)束符。例如字符串”I am happy”共有10個字符,但內(nèi)存中它共占11個字節(jié),最后一個字節(jié)’’是系統(tǒng)自動加上的。

在程序中往往依靠檢測’’的位置來判定字符串是否結(jié)束,而不是根據(jù)數(shù)組的長度來決定字符串長度。

下面用字符串常量來初始化字符數(shù)組,

char str[]={"I am happy"};

也可以

char str[]="I am happy";

注意字符串的兩端是用雙引號而不是單引號。這里str數(shù)組的長度為11,因為系統(tǒng)在最后自動加上一個’’。上面的初始化等價于

char str[]={'I',' ','a','m',' ','h','a','p','p','y', ''};

而不等價于

char str[]={'I',' ','a','m',' ','h','a','p','p','y'};

需要說明的是,字符數(shù)組并不要求它的最后一個字符為’’。下面的寫法是合法的(最后沒有’’),

char str[5]={'C','H','I','N','A'};

char str[]={'C','H','I','N','A'};

是否加’’是選擇性的,而C++編譯系統(tǒng)會對字符串常量自動加一個’’,因此為了使處理方法一致,便于測定字符串的實際長度,推薦人為加上’’,即

char str[6]={'C','H','I','N','A',''};

char str[6]={'C','H','I','N','A'};

char str[]={'C','H','I','N','A',''};

5.字符串數(shù)組

string name[5];//定義一個字符串數(shù)組,包含個字符串元素

string name[5]={"Jeff","Tom","Ada","Mike","Bill"};//定義一個字符串數(shù)組并初始化

每個字符串元素中只包含字符串本身的字符而不包括’’;

在本例中,就是把字符串”Jeff”的地址存放在name[0], 把字符串”Tom”的地址存放在name[1], 把字符串”Ada”的地址存放在name[2], 把字符串”Mike”的地址存放在name[3], 把字符串”Bill”的地址存放在name[4]。

轉(zhuǎn)載于:https://www.cnblogs.com/qnbs1/articles/1746936.html

總結(jié)

以上是生活随笔為你收集整理的C++指针类型介绍的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产不卡一区 | 91免费网址| 91一区在线观看 | wwwwww国产| 欧美成人秋霞久久aa片 | 亚洲中文字幕无码爆乳av | 日本久久久网站 | 国产中文网 | 六月丁香在线视频 | 青青草免费av | 国产精品久久久亚洲 | √天堂资源在线 | 亚洲搞av | 欧美三级网 | 成人av综合网 | 亚洲午夜精品在线 | 国产精选av| 美女视频一区二区三区 | 在线免费观看av的网站 | 天堂av亚洲 | 中文人妻一区二区三区 | 国产7777777 | 91黄址 | 国产主播精品在线 | 国产欧美一区二区三区视频在线观看 | 黄网av | 久久久久国产免费 | 亚欧综合在线 | 亚洲一区二区图片 | 成人免费视频网 | 日本中文字幕在线播放 | 五月丁香花 | 香蕉久热| 伊人爱爱网 | 久久国产中文 | 你懂的在线免费观看 | 久久久精品电影 | 国产免费av网 | 精品在线一区二区三区 | 亚洲欧美bt | 夜夜激情网| 美女久久久久久 | 亚洲福利午夜 | 精品久久久久久无码国产 | 欧洲xxxxx | 三级做爰第一次 | 亚洲系列中文字幕 | 亚洲在线观看免费视频 | 国产精品xxxxxx | 日本aa在线观看 | 天堂va蜜桃一区二区三区 | 自拍偷自拍亚洲精品播放 | 久久国产秒 | 加勒比hezyo黑人专区 | 视色视频 | 亚洲欧美日韩在线不卡 | 亚洲国产999| 国产精品偷伦视频免费看 | 天天摸夜夜添 | 免费国产一区二区三区 | 日韩mv欧美mv国产网站 | 东方成人av| 2019中文字幕在线 | 中文字幕人妻一区二区三区在线视频 | 色诱视频在线观看 | 激情亚洲网 | 人人妻人人爽欧美成人一区 | 国产99久久精品 | 中文字幕欧美在线 | 国产911视频 | 手机在线看片日韩 | 真人抽搐一进一出视频 | 污污视频在线 | 超碰中文在线 | 亚洲成人黄色网址 | 日日操视频| 色婷婷视频网 | 91精品一区二区三区在线观看 | 亚洲日本在线观看视频 | 国产视频观看 | 人民的名义第二部 | 俺也去av | 亚洲美女一区二区三区 | 99re超碰| 亚洲国产精品免费在线观看 | 免费av网址在线观看 | 久久久精品久久久 | 国产乱国产乱老熟 | 91好色先生tv | 亚洲国产一区二区a毛片 | 国产精品激情偷乱一区二区∴ | 亚洲av久久久噜噜噜熟女软件 | 草久久av | 国产精品久久久久电影 | 男人操女人下面视频 | 欧美视频第一页 | 国产亚洲精品女人久久久久久 | 污污网址在线观看 | 全部免费毛片在线播放一个 |