为什么数组在没有指针的情况下不打印?以下代码是否正确?

Why the array is not printing without the pointer? Is the following code correct?

我是编码新手。我正在研究指针。以下代码是正确的,这意味着其中没有语法错误,但第二个 while 循环仍然没有打印任何内容。

#include<stdio.h>
#include<stdlib.h>
int main(){
   
    int arr[]={10,20,30};
    int *ptr=arr;
    int i=0;
    //Printing Array with Pointer
    while(i<3)
    {
        printf("%d\n",*ptr);
        ptr++;
        i++;
    }
    //Printing Array without Pointer
    printf("\n\n");
    while(i<3)
    {
        printf("%d\n",*(arr+i));
        i++;
    }

    return 0;
}

第一个 while 循环后

while(i<3)
{
    printf("%d\n",*ptr);
    ptr++;
    i++;
}

变量i等于3

所以第二个while循环的条件

while(i<3)
{
    printf("%d\n",*(arr+i));
    i++;
}

立即评估为 false。

你的代码的问题是你选择了一个错误的循环。变量 i 仅在循环内使用,因此应在循环范围内声明。

如果你想使用指针输出数组的元素,那么这个变量也是多余的。

你可以这样写

int arr[]={10,20,30};
const size_t N = sizeof( arr ) / sizeof( *arr ); // or use std::size

//Printing Array with Pointer
for ( const int *ptr = arr; ptr != arr + N; ++ptr )
{
    printf("%d\n",*ptr);
}

//Printing Array without Pointer
printf("\n\n");
for ( size_t i = 0; i != N; i++ )
{
    printf("%d\n",*(arr+i));
}

在 while 循环的正上方写 i = 0;。在完成 for loop 然后值 i=3 所以你必须再次 i=0 这样 while 循环开始打印

希望你能得到它