簡體   English   中英

在C中將模運算符與指針一起使用

[英]Using the modulo operator with pointers in C

如果我有一個char指針,例如char *ptr ,該指針保存一個ascii字符的地址,並且想對該地址使用取模運算符,我該怎么做? 每當我嘗試使用諸如int modulo = ptr % 16類的基本操作來執行此操作時,都會收到錯誤消息“ invalid operationnds to binary%”(二進制無效的操作數),因此我對二進制算術的掌握不強,所以我知道我需要繼續發展這一技能,但是如果有人可以告訴我我在這里缺少什么概念,那將對您有很大的幫助,謝謝。

編輯:對不起,我不清楚我要完成什么,但是基本上我只需要顯示一個帶有16個插槽的內存塊。 它是一個程序,在該程序中我已經完成了在數組中找到一個ascii字符的操作,然后顯示了存儲該ascii字符的內存塊。 現在運行它時,它將顯示找到的ascii字符以及找到的字符之后的15個字符及其存儲位置。 代替執行此操作,如果找到的ascii字符位於內存塊的中間,則我需要它來顯示存儲在它周圍的內容,而不僅僅是顯示它之后的內容。 因此,就像找到的字符在陣列的23個插槽中一樣,程序將顯示陣列的插槽16-31中的字符和存儲位置。

您需要臨時將其強制轉換為適當的寬整數,例如

#include <stdint.h>

ptr = (char*)((uintptr_t)ptr % 16);

當然,生成的指針是否具有實際用途是另一回事。

您不能將%應用於指針,甚至不能超過字符串的平方根。 指針不是數字。

正如Paul的回答所提到的,您可以將指針轉換為整數(在<stdint.h>定義的uintptr_t是最佳選擇),然后將%應用於結果,但不能保證它表示任何含義。 實際上,我在系統上工作過,其結果並不意味着您可能期望的含義,因為指針具有不尋常(但完全有效)的表示形式。

您只需要說明您要完成的任務。 (我可以猜測,但我不願意嘗試。)我們可能會幫助您(盡管可能沒有便攜式解決方案)。

更新:

由於您要處理數組的元素,因此無需使用指針算術(至少不是直接玩)進行游戲。

在您的示例中,給定索引值為23,您希望顯示元素16到31。您可以通過對索引值執行整數運算來輕松地做到這一點。 例如(以下為未經測試的代碼):

char arr[256];
int index = 23;
int start = index - (index % 16);
int end = start + 15;
for (int i = start; i <= end; i ++) {
    /* whatever */
}

(C中的數組和指針之間的關系可能會引起混淆。comp.lang.c FAQ的第6節在解釋它方面做得很好。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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