-
c,賦值操作要求左值與右值的型別相同。
同一型別意味著變數本身屬於同一型別,它指向的物件屬於同一型別,並且兩者都是必不可少的。
對於函式,返回值相同,引數型別和數量必須相同。
除此之外,C 還規定必須定義變數才能使用!
在您的示例中,1)返回值相同,引數型別和編號相同,因此編譯通過!
2)返回值相同,引數型別和數量相同,所以編譯也可以通過!
所以我不明白房東在編譯什麼樣的具體問題!
函式未定義的問題是什麼?
int cmp(const void*,const void*);這只是乙個陳述,而不是乙個定義! 您必須稍後定義它。
此外,該問題與編譯器的掃瞄過程有關! 這有點複雜,但您可以大致了解編譯的工作原理!
您可以嘗試調整 p=cmp; 語句的位置,比如main的內側或外側,看看有什麼區別。
-
以下是它的總體外觀:
typedef int (*p)(int ,int );
p max;
p 是指標型別,相當於與 “int* a” 中的 “int*” 相同的效果。
至於你的情況,我無法解釋,你應該發布錯誤程式碼。
-
1. 假設函式 void f(int b)。
1)有乙個定義int a[15],並且呼叫f(a),傳遞第乙個位址。
2)如果呼叫f(&a[1])等價於呼叫f(a+1),則傳遞位址,而不是整個陣列。
其次,如第乙個所述,它仍然是位址。
int arr[3][4];
int (*a)[4] = arr;
a 指向 arr[0],即第一行的位址。
A+1 指向 arr[1],即第二行位址。
-
1.陣列都是傳遞的指標,因此它們是第乙個位址。
2.它只是 a[1] 的位址。
位址 4相對於維度數,如果它是一維的,則移動到第二個元素。
-
...你怎麼看起來像你沒有寫全恩。
當用作引數時,int* a 和 int a 是相同的,兩者都是陣列的第乙個位址。
a[1] 傳遞陣列的第二個元素的位址。 只需對第二個元素的位址進行操作,而不會開啟另乙個空間。
2 如果 int* a 是 A 的位址,則為 3 如果 a 是 int a[const]; A++ 獲取 &a[1] 的位址加上每個移動的型別大小的偏移量。
順便說一句,BS不給積分。
-
指向函式的 C++ 指標定義為:
返回型別。 *pointer name) (函式引數列表),例如。
void*p)(int) 指向 void 的返回值
引數為 int 型別的函式。
如何定義指向類成員函式的函式指標? 使用成員函式指標。
1)非靜態成員函式。
定義方法:返回型別。
類名:*指標名稱)(函式引數列表),例如 void
A::*p)(int) 是指向類 A 中成員函式的函式指標。
賦值方法:p=&a::函式名,而一般函式指標賦值為p=函式名,注意區別。 (成員函式的型別必須為 public)。
呼叫方法:成員函式指標的呼叫必須通過類物件呼叫,a*p(int) 呼叫成員函式(型別為 public)。
2)靜態成員函式。
靜態成員函式的定義和用法與普通函式指標相同,只是將函式指標分配給非靜態成員的方法相同。
這是因為靜態成員函式的指標型別與普通函式的指標型別相同。
範圍。 你靜態字元 *chh;
static char *ch1;雖然兩個指標指向的位址沒有變化,但你有沒有想過它們指向的記憶體位址是否已經釋放,char chc[10]; 它是本地的,函式已經結束,生命週期已經結束,你正在嘗試使用 void times() 中的指標訪問它。 >>>More
指標可以說是C語言的一大特點,很多人一不小心就明白了,其實通過對比視覺方法就可以理解指標是什麼。 當C語言中的資料儲存沒有指標介入時,它是直接操作的,就像你去一棟樓找人,保安直接把人帶到你面前,C語言也訪問資料,但有時你就是不知道這個變數的名字, 也就是說,你不知道這個人叫什麼名字,還能找到資料或人嗎,也就是你可以用C語言中的指標來實現,這相當於你不知道這個人叫什麼名字,但你知道他住在那個房間裡(假設乙個房間住著乙個人), 保安仍然可以把人帶到你身邊,C也是如此,如果你指出資料在那個位置,CPU也可以為你找到資料,同樣的方式。而這樣做有什麼好處,就要說陣列了,你有一堆數字儲存在乙個連續的記憶體單元裡,和你那群朋友住在那棟樓裡類似,而且是挨著住的,你要把他們叫出來玩,就像你想把資料拿出來用一樣,那我就把登記字一一抖給保安,說是哪個人和那個人等等幫我找,C也可以通過這個方法實現,但是明顯太麻煩了,如果知道第乙個人住的房間號,再比如說 一共有10個人, 所以你只需要說幫我打下乙個號碼到人數(指他們住的連續房間號),哦,保安更容易做到,因為保安的名字可能不知道,但房間號必須知道, 在 C 語言中也是如此,你不需要 cal >>>More