![](/img/trans.png)
[英]What does `static int (*const array[SIZE_ARRAY]…)(int a) = {[SOMETHING]=something}` mean in C?
[英]What does something like int *array[99] = {0}, *u do?
bool checkSubarraySum(int* nums, int numsSize, int k) {
int i, s, found = 0;
e_t buff[10000];
int n;
e_t *set[SZ] = { 0 }, *e;
put(set, &buff[n ++], 0, -1);
s = 0;
for (i = 0; i < numsSize; i ++) {
s += nums[i];
if (k) s = s % k;
e = lookup(set, s);
if (e) {
if (i - e->idx >= 2) {
found = 1;
break;
}
} else {
put(set, &buff[n ++], s, i);
}
}
return found;
}
什么是e_t *set[SZ] = { 0 }, *e;
在干嘛 e_t
是用戶定義的類型,但我認為這並不重要。 e
不是在我所知的全局范圍內的任何地方定義的指針,因此我嘗試了以下操作:
int *array[5] = {0}, *u;
並且沒有給出語法錯誤。 第一部分,即int *array[5] = {0}
將此數組的所有五個元素初始化為0。但是*u
的目的是什么? 您不能只是將數組分配給其他對象,對,這是一個地址,而不是指針。 而且,您甚至從未定義過u,因此,我希望出現某種NameError ...
感謝您的任何幫助。
int *array[5] = {0}, *u;
是兩個int
對象的聲明。 首先:
int *array[5] = {0}
聲明一個指向 int [5]
的指針數組(意味着有5個指向int
指針的數組),該數組通過使用“ 通用初始化器 ” {0}
初始化為NULL
。 等效但更直觀的初始化是:
int *array[5] = {NULL}
','
在這里只是一個分隔符,允許第二個聲明*u
被包含在同一行中,而沒有單獨的int *u;
宣言。
(不要與逗號運算符混淆,該運算符只是舍棄最后一個','
的表達式','
求值最后一個表達式。請參見逗號運算符做什么? -謝謝@AnttiHaapala )
所以:
..., *u;
聲明一個(未初始化的) 指向 int
指針 。
它類似於鍵入:
int x, y;
但是在鍵入類似以下內容時要注意類型:
int a, *b, **c;
/* ^ ^ ^
* int int* int**
*/
因此
int *array[5] = {0}, *u;
/* ^ is pointer to int */
e_t *set[SZ] = { 0 }, *e;
是兩個對象的聲明 ; set
是一個指向e_t
的指針數組,而e
是一個指向單個e_t
的指針。 它也可以寫成:
e_t *set[SZ] = {0};
e_t *e;
e_t *set[SZ] = { 0 }, *e;
應被理解為“程序員特此聲明,下面的類型的e_t
:對象指向每個SZ
在元件set
; 以及所述對象通過指向 e
”。
= {0}
導致set
每個元素初始化為空指針-第一個顯式,其余隱式。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.