在不知道大小的情况下打印数组

我有这个function:

int printArray(int* arr, int size) { int i = 0; while (size--) { printf("%d, ", *(arr + i++)); } return EXIT_SUCCESS; } 

如何在不使用size参数的情况下打印数组?

LE我试着这样做:

 int printArray(int* arr) { int i = 0; while (*(arr + i)) { printf("%d, ", *(arr + i++)); } return EXIT_SUCCESS; } 

但每个输出后跟三个未知值:( :1 2 3 4; 输出 :1 2 3 4 343443 -432244 324333)。

谢谢!

您可以将地址传递给最后一个元素:

 int printArray(int* arr, int* end) { do { printf("%d, ", *arr); } while( (arr++) != end); return EXIT_SUCCESS; } 

添加标记值。 您知道的值始终是最后一个值。 对于整数很难,但-1和0是最喜欢的值。

数组只是一系列连续的内存位置。 为了遍历一个数组,你需要知道两件事,起始地址和如何找到结束。

找到结束可以通过几种方式完成,您需要给出:

  1. 明确地结束地址
  2. 数组的长度
  3. 用于标记序列结束的标记值

在第一次尝试时, 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? 不……那么什么时候停止打印?