#include <stdio.h>
#define MAX 4
//定義part結構
struct part{
short member;
char name[10];
}data[MAX] = {1,"smith",
2,"jones",
3,"adans",
4,"wilson"
};
//定義指向結構的指標
struct part *pPart;
int main(void)
{
int count;
//給結構指標賦值,把數組的第一個元素的地址賦給結構指標
pPart = data;
for(count = 0; count < MAX; count++)
{
//顯示指標指向的地址,指標指向結構的成員
printf("At Address %d : %d %s/n",pPart,pPart->member,pPart->name);
/* pPart++等價於pPart = pPart + sizeof(結構),因為這裡指標指向的是結構,此時pPart++指向data[1]
count = 1時pPart++指向的是data[2],count = 2時pPart++指向的是data[3],count = 3時pPart++指向的
是data[3] */
pPart++;
}
return 0;
}
用VC6.0編譯後,在我的機器上,運行結果為:
At Address 4336176 : 1 smith
At Address 4336188 : 2 jones
At Address 4336200 : 3 adans
At Address 4336212 : 4 wilson
我給這段代碼加了下注釋,請各位看看有沒有理解不對的地方。
另外,有一處我不理解,就是這個data[MAX]初始化不明白,MAX為4,也就是說,data[0]、data[1]、data[2]、data[3]都是結構,那怎麼初始化的時候是這樣:
{1,"smith",
2,"jones",
3,"adans",
4,"wilson"
};
這樣是data[0]、data[1]、data[2]、data[3]初始化都是這些值,還是什嗎?
這個結構:
struct part{
short member;
char name[10];
}
不是只有兩個成員嗎?
問題已經解決,解決過程如下:
*******************************************************************
foochow(恰似你的溫柔) :
數組在記憶體中連續分配空間的
{1,"smith",
2,"jones",
3,"adans",
4,"wilson"
};
這個就是給結構data[0]、data[1]、data[2]、data[3]初始化
*******************************************************************
kgdiwss(∮明天去要飯)
你的意思是:
data[MAX] = {1,"smith",
2,"jones",
3,"adans",
4,"wilson"
};
等價於:
data[0] = {1,"smith"};
data[1] = {2,"jones"};
data[2] = {3,"adans"};
data[3] = {4,"wilson"};
*******************************************************************
foochow(恰似你的溫柔)
對,因為數組空間是連續的所以可以連續賦值
*******************************************************************
megaboy(此人已登出)
不過這種編程風格不可取,還是用{}分開來程式更清晰:
struct part{
short member;
char name[10];
}data[MAX] = {
{1,"smith"},
{2,"jones"},
{3,"adans"},
{4,"wilson"}
};
*******************************************************************
感謝兩位朋友的協助。