[英]what does *(&char_array) mean in C?
我有這個C程序:
#include <stdio.h>
int main(){
char char_ar[] = "hello world.";
char* char_ptr = char_ar;
/*Same thing*/
printf("*Same thing:\n");
printf("%x : %c\n", &*char_ptr, *char_ptr);
printf("%x : %c\n", &*char_ar, *char_ar);
/*Not same thing*/
printf("*Not the same thing:\n");
printf("%x : %c\n", char_ptr, *char_ptr);
printf("%x : %c\n", &char_ar, *(&char_ar));
getchar();
}
最后一個printf不會打印出“ mem_address:h”。
而是打印出“ mem_address:some_random_char”
該行中的*(&char_array)會做什么,以便輸出隨機字符?
*(&char_array)
等同於char_array
。 在這種情況下, *
和&
使彼此的效果無效。
C11-§6.5.3.2/ 3:
一元
&
運算符產生其操作數的地址。 如果操作數的類型為“類型”,則結果的類型為“類型的指針”。 如果操作數是一元*
運算符的結果,則不會對該運算符和&
運算符求值,並且結果似乎都被省略了,除了運算符上的約束仍然適用並且結果不是左值。 [...]
請注意,對於指針數據類型,應使用%p
而不是%x
。
printf("%x : %c\n", char_ptr, *char_ptr);
打印char_ptr
指向的字符,應為'h'。
printf("%x : %c\n", &char_ar, *(&char_ar));
打印char_ptr
地址的第一個字節,將其解釋為字符,該字符應顯示為完全隨機且不可預測的字符。
haccks是絕對正確的, *(&char_ar)
等同於char_ar
,但我還想補充一點, *(&char_ar)
與&*char_ar
。
添加這兩行以查看區別:
// This is a char**
printf("%p, sizeof(&*char_ar): %d\n", &*char_ar, sizeof(&*char_ar));
// This is a char*[]
printf("%p, sizeof(*(&char_ar)): %d\n", *(&char_ar), sizeof(*(&char_ar)));
本來可以作為注釋發布的,但是對於代碼示例來說卻有點過多。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.