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