簡體   English   中英

*(&char_array)在C中是什么意思?

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

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