陣列型別 typedef定義的陣列型別的函式呼叫

2021-07-05 09:35:42 字數 1160 閱讀 5590

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 第一條語句定義了乙...