gpt4 book ai didi

c - 与 C 不兼容的指针类型

转载 作者:太空宇宙 更新时间:2023-11-04 02:59:38 26 4
gpt4 key购买 nike

我有一个小的 C 程序,它需要一些 vector 及其相应的系数。使用此信息,它可以计算 vector 的长度(模数)。接下来,程序按长度对包含 vector 的数组进行排序,然后以正确的顺序显示所有 vector 。

似乎一切正常。但是,当我使用 -wall 和 -ansi 参数编译代码时,我收到以下警告:

|23|warning: ISO C90 forbids variable-size array 'v'
|23|warning: ISO C90 forbids mixed declarations and code
|44|warning: passing argument 1 of 'swap' from incompatible pointer type
|44|warning: passing argument 2 of 'swap' from incompatible pointer type

我使用的代码:

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

void swap(double **p, double **q)
{
double *tmp;

tmp = *p;
*p = *q;
*q = tmp;
}

int main()
{
int dim, num;
int i, j;
double **w;

scanf("%d %d", &dim, &num);
w = calloc(num, sizeof(double *));

double v[num];

/* Get vector coefficients for each vector and calculate the length of each vector */
for(i = 0; i < num; i++)
{
w[i] = calloc(dim, sizeof(double));

for(j = 0; j < dim; j++)
{
scanf("%le", &w[i][j]);
v[i] += pow(w[i][j], 2);
}
}

/* Sort vectors by length */
for(i = 0; i < num-1; ++i)
{
for(j = num-1; j > i; --j)
if(v[j-1] > v[j])
{
swap(&w[j-1], &w[j]);
swap(&v[j-1], &v[j]);
}
}

/* Display vectors, including their coefficients, ordered by length */
for(i = 0; i < num; i++)
{
for(j = 0; j < dim; j++)
{
printf("%e", w[i][j]);
if(j != dim)
printf(" ");
}
printf("\n");
}

return 0;
}

关于如何修复这些警告有什么想法吗?

提前致谢。

最佳答案

你正试图交换具有相同功能的两种不同类型,

swap(&w[j-1], &w[j]);
swap(&v[j-1], &v[j]);

其中 &w[j] 是一个 double**&v[i] 是一个 double*。那行不通,因为 C 没有重载。您甚至不能使用 void* 参数,因为您需要在两者之间存储指向的值。

为此您需要两个单独的函数或一个宏(但会失去类型安全性)。

至于混合声明和代码以及可变长度数组,请使用 -std=c99 而不是 -ansi

关于c - 与 C 不兼容的指针类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13542172/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com