这段代码如何工作?

时间:2011-06-07 21:10:10

标签: c pointers

代码非常简单,但我对结果感到头疼。 我只是在玩指针算术,并希望打印出阵列 但我得到了数组的数字加上3。这3个额外的来自哪里?

#include <stdio.h>


int my_array[] = {1,3,5,6,73,343,34};

int *pointer_numeros;

int main (void) {
int i = 0;  
pointer_numeros = my_array;

while(*pointer_numeros) {

        printf("los numeros del array son %d\t %d\n\n", i++, *pointer_numeros++);

            }

            getchar();
            return 0;

    }   

3 个答案:

答案 0 :(得分:3)

*pointer_numeros在数组末尾的计算结果为false;它将继续遍历内存直到它访问内容为零的地址(但这是未定义的行为)。

正如其他人所建议的那样,您可以将数组终止为零。但总的来说,你仍然会遇到一个问题:如果你的某些元素本身为零会怎样?

答案 1 :(得分:1)

你的意思是写:

int my_array[] = {1,3,5,6,73,343,34,0};

您的代码会迭代,直到它在数组中找到零。你的数组中没有零。

答案 2 :(得分:0)

只有当指针指向0时,你的循环才会停止。修复如下:

 int my_array[] = {1,3,5,6,73,343,34,0};