Just My Life & My Work

[C&C++] 指標陣列 (Pointer Array)

一般型態的變數都可以宣告成陣列,那麼指標也可以宣告成指標陣列,這是結合靜態資料結構與動態資料結構的應用,很特別!

指標陣列中的元素都是一個指標變數,而元素值則是指向其它變數的位址。這裡我來說明同樣是儲存字元,一維指標陣列與二維字元陣列有何差別,前者只需要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的位址,在網路上查了好多資料,但是沒查到,可否請知道的人給點提示呢?

參考:C++ Gossip:  指標與字串

Comments on: "[C&C++] 指標陣列 (Pointer Array)" (1)

  1. pchook 的大頭貼

    突然看到這篇,都沒人回你。
    裡面&Name[0]改成Name[0]不就是常數位址。
    我是用printf(“Name[0]位址: %x\n",Name[0]);
    cout好像不行,自動幫你轉譯了。
    常除錯不就知道變數在記憶體中的架構。

隨意留個言吧:)~

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料

標籤雲