0

我正在用 C 做我的第一次家庭作业,我正在努力掌握指针。它们在理论上是有道理的,但在执行时我有点模糊。我有这段代码,它应该取一个整数 x,找到它的最低有效字节,然后用同一位置的那个字节替换 y。GCC 返回:

“2.59.c:34:2:警告:传递 'replace_with_lowest_byte_in_x' 的参数 1 使指针从整数不进行强制转换 [默认启用]

2.59.c:15:6:注意:预期为 'byte_pointer' 但参数的类型为 'int'"

论点 2 也是如此。有人可以向我解释这里发生了什么吗?

#include <stdio.h>


typedef unsigned char *byte_pointer;


void show_bytes(byte_pointer start, int length) {
    int i;
    for (i=0; i < length; i++) {
        printf(" %.2x", start[i]);
    }
    printf("\n");
}

void replace_with_lowest_byte_in_x(byte_pointer x, byte_pointer y) {
    int length = sizeof(int);
    show_bytes(x, length);
    show_bytes(y, length);
    int i;
    int lowest;
    lowest = x[0];
    for (i=0; i < length; i++) {
        if (x[i] < x[lowest]) {
            lowest = i;
        }
    }
    y[lowest] = x[lowest];
    show_bytes(y, length);
}

int main(void) {


    replace_with_lowest_byte_in_x(12345,54321);

    return 0;
}
4

2 回答 2

3

该函数需要两个指针,但您传递的是整数(-constant)。您可能想要的是将数字放入它们自己的变量中并将它们的地址传递给函数:(in main):

int a = 12345, b = 54321;

replace_with_lowest_byte_in_x(&a, &b);

请注意,您仍在传递不兼容的指针。

于 2013-10-07T01:13:19.297 回答
2

编译器是对的,您的 replace_with_lowest_byte_in_x() 需要两个unsigned char *,但您将两个ints 传递给它。是的,ints可以看成是内存地址,但是很危险,所以有警告。&variable给你变量的地址。

于 2013-10-07T01:12:08.163 回答