我有这个功能:
int printArray(int* arr, int size) {
int i = 0;
while (size--) {
printf("%d, ", *(arr + i++));
}
return EXIT_SUCCESS;
}
如何在不使用尺寸参数的情况下打印数组?
L.E。我试着做这样的事情:
int printArray(int* arr) {
int i = 0;
while (*(arr + i)) {
printf("%d, ", *(arr + i++));
}
return EXIT_SUCCESS;
}
但每个输出后跟三个未知值:( in :1 2 3 4; out :1 2 3 4 343443 -432244 324333)。
谢谢!
答案 0 :(得分:2)
您可以将地址传递给最后一个元素:
int printArray(int* arr, int* end) {
do {
printf("%d, ", *arr);
} while( (arr++) != end);
return EXIT_SUCCESS;
}
答案 1 :(得分:1)
添加标记值。您知道的值始终是最后一个值。对于整数很难,但-1和0是最喜欢的值。
答案 2 :(得分:1)
数组只是一系列连续的内存位置。为了遍历一个数组,你需要知道两件事,起始地址和如何找到结束。
可以通过几种方式找到结束,您需要给出:
在您第一次尝试时,printArray(int* arr, int size)
正在使用第二种机制并从开始到结束递增内存位置。
您的第二次尝试printArray(int* arr)
只是说“打印直到找到0”。如果您有一个字符串(char
数组以空终止符结束),但是您有一个int
数组,这个想法就可以了。无法保证该列表中有0,因此您只需继续读取越来越多的内存位置,直到最终得到0。
编写程序非常类似于正常的人类思维过程。简单阅读您的代码,看看它是否有意义:
int in[4] = {1, 2, 3, 4}; // I have an array called in, it has 4 numbers: 1, 2, 3, 4
int ret = printArray(in); // I pass that array to the function printArray
...
while (*(arr + i)) { // while the contents of the memory location (array + i) is
// not 0, print the value we find there
突然间,为什么这不起作用变得非常明显。您的数组是否包含数字0?不......那么什么时候会停止打印?