c-warning:赋值使指针来自不带强制转换的整数[-Wint conversion]p=(i+1)*100



我尝试在不使用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中,pint *,而不是int,因此赋值会将整数(i + 1) * 100转换为指针。相反,请使用*p = (i + 1) * 100

相关内容

最新更新