我試圖完成下列工作: 給出的函數: int f(void *p)
取p的第一個字節,並提取其作爲一個字符。然後根據該字符決定將哪些附加字節提取爲短整數。例如,如果我有一個特定的字符c,然後提取字節4和7作爲短整數並將它們存儲在單獨的變量中;如果我有一個不同的字符d提取字節3,4,5,並將它們存儲爲單獨的變量。用這些信息執行一些其他不相關的代碼。我一直在掙扎幾個小時。提取從同一空指針的字符和各種短整型用C
我嘗試以下:
int f(void *p) {
char *first = &p;
short int *third = p + 2;
short int *fifth = p + 4;
short int *seventh = p + 6;
printf("%s %s %s, %s", first, third, fifth , seventh);
}
int main(int argc, char const *argv[]) {
char test[] = "*5431234567";
f(test);
}
我的結果: ▒▒ς-1295010922 -1295010920,-1295010918
預期: * 4 1 3
過了一會我意識到我試圖去引用一個不起作用的void指針。所以我嘗試鑄造:
char* c = (char*) p;
char first = (char) (*c)
printf("%s", first);
這給了我一個seg故障。
我嘗試了類似的東西與短詮釋鑄造無濟於事。如果這是一個有點不好的問題,我很抱歉。我是C新手,指針和引用的全部概念對我來說都是新手。我的第一語言是Java,它更寬容。
你無法對'void'指針進行算術運算。 – jxh
爲什麼'f'只需要一個'char *'參數,因爲這就是你傳遞給它的東西? – aschepler
形式上,你不能對'void *'進行算術運算。令人遺憾的是,GCC並沒有強制執行該操作,並且在指針運算時將'void *'視爲大致等價於'char *', –