為什麼有人把指標轉換為int型別去傳遞?

時間 2021-06-04 03:33:29

1樓:散熱片

補充乙個freeRTOS裡的例子。

排程器建立任務的函式原型:

BaseType_t xTaskCreate( TaskFunction_t pvTaskCode, //任務函式指標

const char * const pcName,

uint16_t usStackDepth,

voidpvParameters, //這個是作為任務函式的引數傳入

UBaseType_t uxPriority,

TaskHandle_t *pxCreatedTask );

實際使用會是這樣:

static char *pcStringsToPrint =

......// 定義多個待列印字串

//任務函式

static void prvPrintTask( void *pvParameters )

iIndexToString = ( int ) pvParameters; //傳入指標被強制轉換為int,作為前面定義的char*陣列的索引

for( ;; )

main(void)

xTaskCreate( prvPrintTask, "Print1", 1000, ( void) 0, 1, NULL ); // 把(void*)0 作為任務函式的引數傳入

xTaskCreate( prvPrintTask, "Print2", 1000, ( void) 1, 2, NULL ); // (void*)1 .....

剛看到時我驚呆了,還有這種玩法?後來仔細想想,也沒啥,雖然傳入了危險位址,但沒有解引用,沒有把它當位址使用。這樣保持了一套簡單的呼叫套路。

2樓:BHEscaper

僅僅是猜測。

一些程序間通訊的方式(比如訊息佇列)對於傳遞的資料型別有要求,也許這裡的型別轉換是為了能夠將指標放到已經預定義好格式的訊息報文中。

3樓:

void* 雖好,但計算偏移時(就是加減),得強制轉換為(char*),做資料格式解析時你就明白這有多麻煩了,所以有時我喜歡用 intptr_t/uintptr_t,以及 ptrdiff_t。

為什麼有人討厭指標?

Mimosa 指標太象 農民工 在底層 勤勤懇懇幹髒活 為現代化城市 為社會做極大貢獻,卻老是被一些人討厭!這是 農民工 問題 還是討厭 農民工 的人的問題?指標更象一匹 千里馬 如果你沒有能力訓服它,讓它成為脫韁的 Mustang 你應該 怒己不爭 而不是討厭它!指標是所有程式的靈魂 是生命線,無...

為什麼人類廣泛使用電能,將其他能量轉換為電能使用?

小小 電能容易量化,容易量化就方便人與人之間的交易,化學能,太陽能,風能你和大多數人交換難量化,而且本質上這些都是電能,在金屬中傳播的電能損耗小 電能就像錢存在乙個低負利率的銀行 短回答 所有適合儲存的能量都方便轉換成電能,電能方便轉換成其它能量,同時電能方便傳輸。長回答 其它形式的能源也不是沒有被...

為什麼有人把張杰叫做 閏土 ?

乙個鏈結就可以解決的事,人類尷尬精華 張杰https media.weibo.cn article?id 2309404235614022142661 傑小也 我覺得三點,第一點是出身問題,小地方人一開始的流行品味都有些非主流影響。第二點是團隊問題,明星的品味和風格跟團隊關係很大。第三點是目標觀眾問...