簡體   English   中英

為什么指向int數組的未初始化指針可以分配變量的值?

[英]Why can uninitialized pointer to int array be assigned variable's value?

我已經閱讀了一些問題的答案,例如為什么可以為指針分配值? 但是我對更改指針的值仍然有些困惑。 有些評論似乎並不完全准確,或者可能是針對具體實現的。 (例如: a[1] is exactly the same as writing *(a + 1). Obviously you can write *a = 3 since a is int*, so you can also write *(a + 1) = 3, so you can also write a[1] = 3 )。

寫入*a = 3會產生警告:初始化會使指針從整數開始而不進行強制轉換。 以及段錯誤。

我的問題如下。

int main(void)
{
    int b = 5, c = 10;
    int *a = b;

    *a = c; /* Will not work. (Should technically change the value of b to 10, leaving the pointer still pointing to b.) */
    printf("%d\n", *a);
    return 0;
}

上面的示例將不起作用,並且將產生一個段錯誤,但是以下原因是我不知道的某些原因。

int main(void)
{
    int a[10], i;
    for (i = 0; i < 10; ++i) {
        *(a + i) = i; /* Supposedly the same logic as '*a = c;', but works*/
    }

    for (i = 0; i < 10; ++i) {
        printf("%d\n", *(a + i));
    }

    return 0;
}

感謝您的時間和精力。

**編輯:謝謝您的回答,因為它是* a =&b(我知道這個(典型),但是現在帶有循環的第二個例子尚不清楚),數組索引被視為變量,而不是我假定的地址?

這個:

int b = 5, c = 10;
int *a = b;

不起作用 您認為第二行意味着:

int *a;
*a = b;

但事實並非如此。 這意味着:

int *a;
a = b;

上面的錯誤意味着您執行以下操作:

*a = c;

您的程序崩潰(或者可能不是,未定義行為!),因為a是無效的指針(它指向地址5,這在許多方面都是錯誤的)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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