在Deitel的C的第7章中,如何编程作者使用气泡排序示例来证明信息隐藏不允许该功能知道单个数组元素,可以使用Pointer通过周围的地址并使用相同的方式。
这是使用指针的交换函数:
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;
}
main():
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>));
获得相同的结果。
您可能还需要查看此答案,该答案会更深入地了解数组和指针之间的差异。