我理解print1函式的作業方式,但是為什么在呼叫print2函式時我不需要傳遞引數的地址,而只需要將它轉換為 void 指標?我不明白輸出是如何正確的。我說的時候是什么意思(void*)20?然后整個 "函式int n = (int)param內部print2做了什么?
#include <stdio.h>
#include <stdlib.h>
void print1(void* param)
{
int n = *((int*)param);
printf("You sent: %d\n", n);
}
void print2(void* param)
{
int n = (int)param;
printf("You sent: %d\n", n);
}
int main()
{
int number = 10;
print1(&number);
print2((void*)20);
return 0;
}
uj5u.com熱心網友回復:
(void *)20轉換20為指標。根據 C 2018 6.3.2.3 5,結果是實作定義的。
print2((void*)20);將該指標發送到print2.
在 中print2,int n = (int)param;將該指標轉換回int. 根據 C 2018 6.3.2.3 6,結果是實作定義的。一個常見的結果是原始整數被恢復,前提是它沒有違反 C 實作中使用的尋址機制的限制或復雜性。
printf("You sent: %d\n", n);將其發送int到printf.
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/352385.html
上一篇:使用指標在C中的結構中存盤資訊
