我尝试在不使用scanf
的情况下用数字填充数组。我遇到警告:assignment makes pointer from integer without a cast [-Wint-conversion]
p = (i + 1) * 100;
^
当我尝试打印数组时,数组会输出随机值。我该如何解决?
#include<stdio.h>
int main() {
int nums[8], i;
int *p;
p = nums;
for (int i = 0; i < 8; ++i)
{
p = (i + 1) * 100;
p++;
}
return 0;
}
您声明了一个指针
int *p;
p = nums;
然后,您尝试为指针本身分配一个整数值,而不是为指针所指向的数组元素赋值。
p = (i + 1) * 100;
很明显你指的是
*p = (i + 1) * 100;
请注意,在for循环中使用幻数8
是个坏主意。最好使用命名常量。
如果你想在for循环中使用指针填充数组,那么程序可以按照以下方式查找
#include<stdio.h>
int main( void )
{
enum { N = 8 };
int nums[N];
int init_value = 1;
for ( int *p = nums; p != nums + N; ++p )
{
*p = 100 * init_value++;
}
return 0;
}
使用这种方法,您可以编写一个单独的函数,以以下方式初始化数组
void init_array( int *a, size_t n, int value )
{
for ( int *p = a; p != a + n; ++p )
{
*p = 100 * value++;
}
}
在赋值p = (i + 1) * 100
中,p
是int *
,而不是int
,因此赋值会将整数(i + 1) * 100
转换为指针。相反,请使用*p = (i + 1) * 100
。