一般型態的變數都可以宣告成陣列,那麼指標也可以宣告成指標陣列,這是結合靜態資料結構與動態資料結構的應用,很特別!
指標陣列中的元素都是一個指標變數,而元素值則是指向其它變數的位址。這裡我來說明同樣是儲存字元,一維指標陣列與二維字元陣列有何差別,前者只需要row的size,而後者需要row和column的size,編譯器會幫我們分配記憶體空間給這兩變數,前者配的空間恰恰好,而後者則會配大於等於所需的空間,看一下程式碼就可以明白:
/**
Theme: Pointer Array
Compiler: Visual C++ 2010 Express
Date: 100/10/28
Author: HappyMan
Blog: https://cg2010studio.wordpress.com/
*/
#include<iostream>
using namespace std;
//一維指標陣列
char *Name[3]={"HappyMan","X-Man","SuperMan"};
//二維字串陣列
char name[3][10]={"HappyMan","X-Man","SuperMan"};
int main(){
cout<<"一維指標陣列"<<endl;
cout<<"Name[0]位址: "<<&Name[0]<<endl;
cout<<"Name[1]位址: "<<&Name[1]<<endl;
cout<<"Name[2]位址: "<<&Name[2]<<endl;
cout<<"二維字串陣列"<<endl;
cout<<"name[0]位址: "<<&name[0]<<endl;
cout<<"name[1]位址: "<<&name[1]<<endl;
cout<<"name[2]位址: "<<&name[2]<<endl;
system("pause");
return EXIT_SUCCESS;
}
第一個宣告是使用指標陣列,每一個指標元素指向一個字串常數,只要另外指定字串常數給某個指標,該指標指向的記憶體位址就不同了,依上述例子用到9+6+9個字元空間;而第二個宣告則是配置連續的3*10的字元陣列空間,字串是直接儲存在這個空間,每個字串的位址是固定的,而使用的空間也是固定的(也就是含空字元會是10個字元)。
程式執行後結果:
一維指標陣列
Name[0]位址: 00419000
Name[1]位址: 00419004
Name[2]位址: 00419008
二維字串陣列
name[0]位址: 0041900C
name[1]位址: 00419016
name[2]位址: 00419020
請按任意鍵繼續 . . .
現在我想知道~如何知道字串常數的位址(不是指標陣列的位址)為何,也就是"HappyMan"、"X-Man"、"SuperMan"的第一個字元H、X、S的位址,在網路上查了好多資料,但是沒查到,可否請知道的人給點提示呢?
Comments on: "[C&C++] 指標陣列 (Pointer Array)" (1)
突然看到這篇,都沒人回你。
裡面&Name[0]改成Name[0]不就是常數位址。
我是用printf(“Name[0]位址: %x\n",Name[0]);
cout好像不行,自動幫你轉譯了。
常除錯不就知道變數在記憶體中的架構。
讚讚