我试图完成下列工作: 给出的函数: 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 *', –