日韩性视频-久久久蜜桃-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)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产精品久久久久久久久久久不卡 | 日韩免费视频一区二区 | 日本视频在线播放 | 亚洲综合日韩在线 | 亚洲黄色精品 | 六月丁香婷婷网 | 激情视频久久 | 最新精品国产 | 天堂精品| 97超碰伊人| 麻豆成人入口 | 人人妻人人爽欧美成人一区 | 777久久| 久久不卡影院 | 日韩一区二区中文字幕 | 国产特级黄色录像 | 噜噜噜亚洲色成人网站 | 人乳喂奶hd无中字 | 污视频软件在线观看 | 精品国产综合区久久久久久 | 岛国二区 | 国产剧情在线 | 毛片网页| 日韩精品av一区二区三区 | 亚洲综合精品一区 | 亚洲精品午夜 | 国产91一区在线精品 | 一区二区三区四区五区在线视频 | 亚洲综合久久av一区二区三区 | 伊人中文字幕 | www.777含羞草 | 久久久久久欧美 | 免费三级在线 | 在线观看免费黄色小视频 | 国内偷拍第一页 | 欧美成人精品在线视频 | 韩国成人理伦片免费播放 | 91免费看.| 天天爱综合 | 国产精品美女在线 | 国产簧片| 91超碰免费在线 | 国产精品色综合 | 99re这里只有精品在线观看 | 中文字幕一区二区三区人妻在线视频 | 国产亚洲精品成人av久久ww | 国产精品久久久久久久久久久久久久 | 国产精品怡红院 | 99久久久国产精品免费蜜臀 | 香蕉视频网址 | 亚洲成a人v欧美综合天堂麻豆 | 青青草手机在线 | 免费看成人av | 色老头一区 | 91操视频| 国产精品欧美久久久久天天影视 | 在线观看亚洲欧美 | 国产精品性爱在线 | 日本熟妇一区二区三区四区 | 久久影视一区二区 | 亚洲区视频 | 青青成人 | 青青草成人网 | 紧身裙女教师三上悠亚红杏 | 日韩精品第一区 | 杂技xxx裸体xxxx欧美 | 北条麻妃一二三区 | 欧美一区二区三区不卡视频 | 伊人精品综合 | 爱搞逼综合网 | 国产福利免费在线观看 | 黄色av观看 | 久久久亚洲一区二区三区 | 欧美日韩亚洲系列 | 国产精品一级黄色片 | 深爱激情久久 | 日本成人片在线 | 久久久久久无码午夜精品直播 | www亚洲成人 | 自拍偷拍第3页 | 国产精品天天狠天天看 | av黄色av | 96日本xxxxxⅹxxx17 | 99热伊人 | 成人做爰免费视频免费看 | 欧美人和黑人牲交网站上线 | a在线视频 | 欧美理伦片在线播放 | 国产免费av片在线观看 | 在线免费看mv的网站入口 | 大牛影视剧免费播放在线 | 欧美人体一区二区三区 | 日韩欧美一二三四区 | 国产麻豆一区二区三区 | 精品一区二区三区免费 | 国产黑丝在线 | 国产免费一区二区三区最新不卡 | 天天操天天操天天射 | 黄三级|