是否int *是派生資料型別?
我感到困惑是因為我覺得這兩個案例在這個問題上是矛盾的。
情況 1:
假設: int *將被視為派生資料型別。然后考慮下面給出的代碼 -
void someRandomFunction()
{
int* a, b, c, d;
int e, f, g, h;
....
....
....
}
在這個函式中,如果我們需要考慮int *作為一個派生的資料型別,那么就像e, f, g, h是int資料型別的變數一樣,所有的變數都a, b, c, d必須是指向int資料型別的指標,對嗎?
但是因為它只是a指向int資料型別的指標,所以這是否反駁了我們對這種情況的假設?
案例2:
假設: int *是不被視為一個派生資料型別。然后考慮下面給出的代碼 -
int* MyFunc()
{
int *p;
....
....
....
return p;
}
這里,int *是在return's datatype向編譯器指示,對嗎?那么,這是否證明這int *是一個派生的資料型別,即,這是否反駁了我們對這種情況的假設?
uj5u.com熱心網友回復:
int * 是否是派生資料型別?
它是從物件型別派生的型別int。
如果我們需要將int *視為派生資料型別,那么就像e,f,g,h是int資料型別的變數一樣,所有變數a,b,c,d都必須是指向int資料型別的指標,對嗎?
如果您將型別int *作為型別說明符引入,例如
typedef int * T;
那么確實在這個宣告中
T a, b, c, d;
所有宣告的變數都具有型別int *。否則,符號*有關的變數宣告符a在此宣告
int* a, b, c, d;
可以重寫為
int ( * a ), b, c, d;
注意宣告是這樣定義的(這里是宣告的部分定義):
declaration:
declaration-specifiers init-declarator-listopt ;
declaration-specifiers:
type-qualifier declaration-specifiersopt
init-declarator-list:
init-declarator
init-declarator-list , init-declarator
init-declarator:
declarator
declarator = initializer
那是在這個宣告中
int* a, b, c, d;
所有宣告符的公共型別說明符是int,宣告符a的形式為*a.
雖然在本宣告中
T a, b, c, d;
通用型別說明符T表示派生指標型別int *。
即派生指標型別 int * 是從其參考型別構建的int。派生型別int **是從其參考型別構建的int *,依此類推。
因此,例如在 C 中按參考傳遞意味著通過參考原始物件型別的派生指標型別的另一個物件間接傳遞一個物件。
uj5u.com熱心網友回復:
好的。我們有一個基本資料型別(int、float、double...),我們有一個派生資料型別,我們還有一個派生資料型別(帶有一些擴展的基本資料型別)。
在您的第一個示例中,int* a, b, c, d;我們有a一個指向整數的指標,但b, c, d 不是指向整數的指標,因為它們只是整數!
所以,是的,你是對的!int*是從int派生的。你的困惑開始于b,c,d也作為一個指標,但它們不是。在 C 編程語言中,在變數宣告程序中,如果*
變數名和她的資料型別之間有一個變數,那么該變數就是一個指向她的資料型別的指標。
uj5u.com熱心網友回復:
派生資料型別是從基本資料型別派生的資料型別。在這種情況下,int *是從 派生的資料型別int。
你的第一個分析是不正確的。獲取b, c, d有int資料型別并沒有說int *是不是派生的資料型別。所以這只是關于 C 是如何作業的。這就是為什么像這樣撰寫宣告總是一個好主意的原因:int *a, ....因此*與變數相鄰,而不是表示任何即將到來的變數不采用*資料型別而僅采用資料型別的型別。
就像陣列一樣。
int a[10], b;
這里的陣列是派生的資料型別,但b具有型別int并不表示該陣列不是派生的資料型別。
uj5u.com熱心網友回復:
陣列、結構、聯合、函式、指標和原子型別是從其他型別派生的。
int* a, b;不是一種表示b指標型別的方式。宣告的語法是這樣*系結的a;宣告實際上是int *a, b;,好像是int *a; int b;。
在 C 中,宣告使用基本型別,例如int,然后通過使用型別將如何使用的“圖片”來描述派生型別。在 中int *a;,我們說*a將用作int. 由此推匯出a必須是指向 an 的指標int。同樣,int *a[3]表示*a[i]將用作int,因此a[i]必須是指向 的指標int,因此a必須是指向 的指標陣列int。
然后int *a, b;說*ais anint和bis an int。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/344547.html
上一篇:對C 中的char*感到困惑
