當我使用此代碼時,GCC給了我一個'從不兼容的指針類型初始化'的警告(儘管代碼工作正常,並且執行它應該做的事情,數組的元素)。分配給指針時從不兼容的指針類型警告初始化
#include <stdio.h>
int main(void)
{
int arr[5] = {3, 0, 3, 4, 1};
int *p = &arr;
printf("%p\n%p\n\n", p);
for (int a = 0; a < 5; a++)
printf("%d ", *(p++));
printf("\n");
}
然而,當我使用的代碼
int main(void)
{
int arr[5] = {3, 0, 3, 4, 1};
int *q = arr;
printf("%p\n%p\n\n", q);
for (int a = 0; a < 5; a++)
printf("%d ", *(q++));
printf("\n");
}
這兩個片段之間的唯一區別該位沒有給出警告的是,我分配* P = & ARR和* Q = ARR。
- &的製作方法究竟有什麼不同?
- 爲什麼代碼在兩種情況下執行並給出完全相同的輸出?
數組類型與([decays into]([https://stackoverflow.com/questions/1461432/what-is-array-decaying);)不兼容)指向數組項的指針,因此沒有問題在第二種情況下。 – spectras
用'gcc -std = c11 -pedantic-errors'編譯C代碼是一種很好的做法,特別是在學習時。這會阻止你執行無效的代碼C. – Lundin