为什么数组在没有指针的情况下不打印?以下代码是否正确?
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 循环开始打印
希望你能得到它
我是编码新手。我正在研究指针。以下代码是正确的,这意味着其中没有语法错误,但第二个 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 循环开始打印
希望你能得到它