簡體   English   中英

像int * array [99] = {0},* u會做什么?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM