簡體   English   中英

C指向數組的指針; 到原始

[英]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是指向整個數組的指針,而不僅僅是它的第一個元素。 分配是類型錯誤: pnamechar * ,而&pnamechar (*)[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是一個intpage是一個int *

您從什么來源學習C?

不幸的是,我無法告訴您如何配置Visual Studio 2015,因為我以前從未使用過它。 您是否嘗試閱讀過其手冊?

暫無
暫無

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

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