[英]C Pointer To Array; To Primitive
我正在使用不顯示與指針使用有關的編譯器警告的Visual Studio 2015。 如果我暫時指向一個指向數組char name[] = "My Name"
的指針char* p
,則我沒有任何指導說明以下內容並不完全相同; 即產生指向數組第一個字符的指針
char* pname = name; // points to first char in array
printf("\n%c\n", *pname);
pname = &name; // points to first char in array
printf("\n%c\n", *pname);
pname = &name[0]; // this explicitly points to the first char in the array
printf("\n%c\n", *pname);
每個printf
的結果是相同的值,並且由於我看不到編譯器警告,因此我需要有關哪種格式正確的指南。
這與指向int的指針相同,因此我看不到編譯器警告,因此我假設以下內容是等效的
int age = 45;
int* page = &age; // point to age
page = age // pointer to age
有人可以澄清一下,還是可以幫助我在Visual Studio 2015中打開編譯器警告,而不必切換到TDM GCC + Eclipse Oxygen。
要點-語法上明確並糾正所有警告
char* pname = name; // points to first char in array
正確。 評估數組時,您將獲得一個指向其第一個元素的指針。
pname = &name; // points to first char in array
不正確。 &name
是指向整個數組的指針,而不僅僅是它的第一個元素。 分配是類型錯誤: pname
是char *
,而&pname
是char (*)[8]
。
pname = &name[0]; // this explicitly points to the first char in the array
正確。 之所以起作用,是因為a[b]
被定義為*(a + b)
。 因此&name[0]
真正含義是&*(name + 0)
。 和以前一樣,數組求值為其第一個元素的地址。 加0
不會改變它。 *
取消引用指針,但是&
返回到地址(它們互相抵消)。
int age = 45; int* page = &age; // point to age
正確。
page = age; // pointer to age
不正確。 這是一個類型錯誤: age
是一個int
而page
是一個int *
。
您從什么來源學習C?
不幸的是,我無法告訴您如何配置Visual Studio 2015,因為我以前從未使用過它。 您是否嘗試閱讀過其手冊?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.