在不知道大小的情况下打印数组
我有这个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是最喜欢的值。
数组只是一系列连续的内存位置。 为了遍历一个数组,你需要知道两件事,起始地址和如何找到结束。
找到结束可以通过几种方式完成,您需要给出:
- 明确地结束地址
- 数组的长度
- 用于标记序列结束的标记值
在第一次尝试时, 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? 不……那么什么时候停止打印?