typedef 定義陣列型別:**如下(vs2013)(不能實現陣列傳遞)
【v1.0】
typedef unsigned
char
elemtype[6];
int return(elemtype **p);
*p = &a;
return 1;
}main()
用typedef 定義的陣列型別來定義指標
elemtype *p;等價於typedef
unsigned
char (*p)[6];
參考譚浩強的書上指向陣列的指標的知識。「p」為指向陣列的指標,可以理解為二維陣列。」p+1」為指向下一行,但是不取該行。「*p」便是對二維陣列取行的操作,是行的首位址。「*p+1」是在行的基礎上偏移一列,是元素的位址。「**p」先取該行位址,再取首位址的元素,輸出為0號元素。「*(*p+i)」取該行第i號元素。
在return()函式中,形參定義為elemtype *p時,對指標賦值時為 「p=a;」 如果用 」*p=a;」 是無法辦到的。因為 」*p」是一維陣列,也是首位址,就像 「a」 一樣(陣列變數名不能賦值),所以會報錯「*p」不能作為左值(當然這裡可以呼叫函式memcpy()來代替賦值語句)。對於「p=a;」 該語句是不能將陣列「a」 一次性傳出去的。因為改變的是子函式的形參。
【v2.0】
#include
#include
#include
typedef
unsigned
char
elemtype[6];
int return(elemtype **p);
*p = &a;
return 1;
}main()
}1.0版本看似沒錯,但得不到想要的輸出(如果沒有關鍵字 static)。把2.0版本中的for()拷貝到1.0版本中,你就會發現輸出的根本不是想要是資料。「a」 在定義的時候定義的位址能夠傳給指標「e」,但是 「a」位址裡面的內容完全無法保證,因為當子函式結束時,對應的記憶體會釋放作他用。
第二點是for()中的第乙個printf()。「*e+i」是跳行,位址每次加」i*sizeof(elemtype)」。按理來說 」e+i「表示位址按頁的大小來增加,但是輸出結果顯示每次加「i*4」. 也就是說位址是按「i」 的變數型別來加的(4個位元組表示乙個int型變數)。
使用typedef語句定義陣列型別
使用typedef語句定義陣列型別 1.一維陣列型別的定義格式 typedef 元素型別關鍵字 陣列型別名 常量表示式 例如 1 typedef int vector 10 2 typedef char strings 80 3 typedef short int array n 第一條語句定義了乙...
使用typedef語句定義陣列型別
使用typedef語句定義陣列型別 1.一維陣列型別的定義格式 typedef 元素型別關鍵字 陣列型別名 常量表示式 例如 1 typedef int vector 10 2 typedef char strings 80 3 typedef short int array n 第一條語句定義了乙...
使用typedef語句定義陣列型別
使用typedef語句定義陣列型別 1.一維陣列型別的定義格式 typedef 元素型別關鍵字 陣列型別名 常量表示式 例如 1 typedef int vector 10 2 typedef char strings 80 3 typedef short int array n 第一條語句定義了乙...