This question already has answers here:
Closed 3 years ago.
How do I determine the size of my array in C?
(20个答案)
我有一种情况,我把一个包含2个1字节值的数组传递给一个函数,但是不知怎么的,这个函数认为数组是4字节长的,这会在很大程度上扰乱我的位操作。我甚至尝试显式地将每个数组值强制转换为uint8,但没有成功。你知道会发生什么吗?在EclipseMars上使用cygwin的gcc工具。
typedef char uint8; //char is 1 byte in my system.

void setBitArray(uint8 bitArray[], int first, int last, uint8 type) {
    if(first >= 0 && last < sizeof(bitArray) * 8) { // If the block is in bounds
        ...
    }
}
...
int main() {
    uint8 bitArray[2] = {(uint8)0, (uint8)0};
    setBitArray(bitArray, 0,10, 1);
    return 0;
}

编辑
还有一件事。sizeof(bitArray)在main()中生成2个字节。

最佳答案

向函数传递数组将发送数组中第一个元素的地址,而不是将整个数组作为对象发送。函数无法识别传递地址的类型,因此无法提供大小。
简单的解决方案是在结构中传递数组的大小,或者随机地

typedef char uint8; //char is 1 byte in my system.

void setBitArray(uint8 bitArray[], int size, int first, int last, uint8 type) {
    if(first >= 0 && last < size * 8) { // If the block is in bounds
        ...
    }
}
...
int main() {
    uint8 bitArray[2] = {(uint8)0, (uint8)0};
    setBitArray(bitArray, (int)sizeof(bitArray), 0, 10, 1);

    return 0;
}

关于c - C将8位值转换为16位值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33793246/

10-11 19:06