我有一個標頭中定義的全局變量/緩衝。我有兩個源文件,一個函數庫(lib.c)和一個測試平臺(tb.c),都包含頭文件。C指針,指向全局變量:不同的指針
在庫中,我填充全局變量緩衝區,打印指針值並通過迭代指針,即[1,2,3,4,5等],用指針打印u8緩衝區的一些條目0xC8004C58(緩衝區長度= 2144)。
現在在測試平臺上,我以同樣的方式抓取一個指向這個同樣的全局u8緩衝區的指針,正好是。現在我的解釋是全局變量保持在同一個地方,所以指向它的開始的指針應該是相同的,但是我得到的指針是0xC80054D8。顯然,當指針現在不同時,返回的數據是[0,0,0,0,0等]。
所以: 如果u8緩衝區保持在同一個位置並且是全局定義的,爲什麼指向這個緩衝區的指針會根據我在lib.c或tb.c中而有所不同?
我使用的報頭創建我的緩衝區:
static u32 RxBuffer_Data[MAX_DMA_RX_FIFOMODE_WORDS] = { 0 };
我用我創建的指針在lib.c文件:
u32 *RxBufferPtr_Data = RxBuffer_Data;
我創建我的指針tb.c文件使用:L u32 * RxBufferPtr_Data = RxBuffer_Data;或& RxBuffer_Data。兩者都返回相同的值,並且兩者都不等於在lib.c文件中正確輸出緩衝區數據的指針。
根本不使用全局變量。只需將它封裝到帶訪問器/等的單個模塊中即可。功能。 – Olaf