c - 信息隐藏如何阻止函数访问单个数组元素?

标签 c pointers information-hiding

在 Deitel 的《C 如何编程》的第 7 章中,作者使用冒泡排序示例来说明信息隐藏不允许函数知道单个数组元素,可以使用指针来传递地址并使用相同的方法方式。

这是使用指针的交换函数:

void swap( int *element1Ptr, int *element2Ptr ) {
    int hold = *element1Ptr; 
    *element1Ptr = *element2Ptr; 
    *element2Ptr = hold;
    } 

这是我所做的:

void swap(int array[],int j) {
    int hold = array[j];
    array[j] = array[j + 1];
    array[j + 1] = hold;
}

主函数:

int main(void) {
    int b[] = {2,6,4,8,10,12,89,68,45,37};
    for (int i = 0; i < 9; i++) {
        for (int n = 0; n < 9; n++) {
            if (b[n] > b[n + 1]) {
                swap(&b[n], &b[n+1]); // or swap(b,n);
            }
        }
    }

    for (int i = 0; i < 9; i++) {
        printf("%d  ", b[i]);
    }
    puts("");
    return 0;
}

我运行了代码并且都正确地对数组进行了排序。所以我认为我的函数实际上获得了对单个元素的访问。我哪一部分理解错了?在继续之前,我需要确保我理解每一点,因为跳过一点确实会使接下来的内容难以理解。

最佳答案

在 C 语言中,指针和数组是可以互换的。当您通过索引访问数组元素时,如myArray[x] ,它的意思是“myArray 的位置 + (x * 数组中元素的大小)”。因此,您可以通过执行 myArray + (x * sizeof(<type of myArray>)); 获得相同的结果.

您可能还想查看this answer其中更深入地介绍了数组和指针之间的差异。

关于c - 信息隐藏如何阻止函数访问单个数组元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40802706/

相关文章:

c - 为什么有些人在调用 malloc 后不检查 NULL?

将全局数组复制到另一个全局数组

c - 如何根据给定地址初始化结构体?

java - 接受默认序列化时封装如何被破坏?

oop - Fortran 2003/2008 子类的数据继承

c - 如何让我的代码进行正确的计算?

c - 指向 char 数组的指针的问题

c - 重叠指针、类型的限制限定符的粒度

pointers - Go指针交换问题

abstraction - 信息隐藏与隐藏的依赖关系