国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

c/c++中的字符指針數組,指向指針的指針的含義

2019-11-17 05:40:23
字體:
來源:轉載
供稿:網友

  就指向指針的指針,很早以前在說指針的時候說過,但后來發現很多人還是比較難以理解,這一次我們再次仔細說一說指向指針的指針!

先看下面的代碼,注重看代碼中的注解!

//程序作者:管寧
//站點:www.cndev-lab.com
//所有稿件均有版權,如要轉載,請務必聞名出處和作者
#include <iostream>
#include <string>
usingnamespacestd;

voidPRint_char(char* array[],intlen);//函數原形聲明

voidmain(void)
{
//-----------------------------段1-----------------------------------------
char*a[]={"abc","cde","fgh"};//字符指針數組
char* *b=a;//定義一個指向指針的指針,并賦予指針數組首地址所指向的第一個字符串的地址也就是abc/0字符串的首地址
cout<<*b<<""<<*(b+1)<<""<<*(b+2)<//-------------------------------------------------------------------------

//-----------------------------段2-----------------------------------------
char* test[]={"abc","cde","fgh"};//注重這里是引號,表示是字符串,以后的地址每加1就是加4位(在32位系統上)
intnum=sizeof(test)/sizeof(char*);//計算字符串個數
print_char(test,num);
cin.get();
//-------------------------------------------------------------------------
}

voidprint_char(char* array[],intlen)//當調用的時候傳遞進來的不是數組,而是字符指針他每加1也就是加上sizeof(char*)的長度
{
for(inti=0;i{
cout<<*array++<}
}
下面我們來仔細說明一下字符指針數組和指向指針的指針,段1中的程序是下面的樣子:

char*a[]={"abc","cde","fgh"};
char* *b=a;
cout<<*b<<""<<*(b+1)<<""<<*(b+2)<


char *a[]定義了一個指針數組,注重不是char[], char[]是不能同時初始化為三個字符的,定義以后的a[]其實內部有三個內存位置,分別存儲了abc/0,cde/0,fgh/0,三個字符串的起始地址,而這三個位置的內存地址卻不是這三個字符串的起始地址,在這個例子中a[]是存儲在棧空間內的,而三個字符串卻是存儲在靜態內存空間內的const區域中的,接下去我們看到了char* *b=a;這里是定義了一個指向指針的指針,假如你寫成char *b=a;那么是錯誤的,因為編譯器會返回一個無法將char* *[3]轉換給char *的錯誤,b=a的賦值,實際上是把a的首地址賦給了b,由于b是一個指向指針的指針,程序的輸出cout<<*b<<""<<*(b+1)<<""<<*(b+2)<結果是

abc
cde
fgh

可以看出每一次內存地址的+1操作事實上是一次加sizeof(char*)的操作,我們在32位的系統中sizeof(char*)的長度是4,所以每加1也就是+4,實際上是*a[]內部三個位置的+1,所以*(b+1)的結果自然就是cde了,我們這時候可能會問,為什么輸出是cde而不是c一個呢?答案是這樣的,在c++中,輸出字符指針就是輸出字符串,程序會自動在碰到/0后停止.



我們最后分析一下段2中的代碼,段2中我們調用了print_array()這個函數,這個函數中形式參數是char *array[]和代碼中的char *test[]一樣,同為字符指針,當你把參數傳遞過來的時候,事實上不是把數組內容傳遞過來,test的首地址傳遞了進來,由于array是指針,所以在內存中它在棧區,具有變量一樣的性質,可以為左值,所以我們輸出寫成了,cout<<*array++<到這里這兩個非常重要的知識點我們都說完了,說歸說,要想透徹理解希望讀者多動手,多觀察,熟能生巧!c/c++中的字符指針數組,指向指針的指針的含義

內存結構示意圖!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 平江县| 航空| 澄迈县| 灵璧县| 桐乡市| 昌乐县| 涞源县| 镇坪县| 绍兴市| 北流市| 岚皋县| 集贤县| 章丘市| 怀柔区| 永新县| 寻乌县| 建阳市| 乐平市| 通许县| 乳山市| 浮梁县| 交城县| 绥滨县| 马公市| 平山县| 武汉市| 正定县| 兴城市| 临沧市| 台州市| 姚安县| 阿拉善盟| 若羌县| 桐城市| 苍梧县| 陕西省| 许昌县| 明光市| 垣曲县| 玉门市| 咸丰县|