我对 C 中的语法有问题。我不太确定程序中的指针和数组



这是我写的程序:

#include <stdio.h>
double squareVec(double vec[], int n) {//eckige Klammer
int j=0;
for(j=0; j<n; ++j) {// Inkrementierung und ; und n ausgebessert und J=0
double*vec[j] = &vec[j] * &vec[j];
}
return vec;
}
int main() {//int main
double vec[3] = {-1.0,2.0,0.0};
int j=0;
squareVec(vec,3);
for(j=0; j<3; ++j) {
printf("vec[%d] = %f ",j,vec[j]);
}
printf("n");
}

我正在尝试这个:函数squareVec是对一个向量的所有元素进行平方。(- 1,2,0)将变成(1,4,0),必须以指针形式传递。

我的问题是:

一行"double*vec[j] = &vec[j] * &vec[j];"不正确。数组实际上是一个指针,所以我不需要写">

双* vec [j] .

double vec[j] ist enough我相信,但我不确定。此外,我相信&在",vec [j]";也应该被省略因为如果我想要得到数字的平方我不需要把两个地址相乘,我需要用实际的数字来做。我也不太确定返回向量。我还需要一个返回函数吗?当for循环结束时,它不是自动转到main函数吗?

我试过了,但编译器总是输出:squareVec.c:5:1: error:可变大小的对象可能无法初始化vec [j] = vec vec [j]; [j] *

对于初学者来说,函数double甚至double *的返回类型都没有意义。函数的返回类型应为void

在for循环之外声明变量j并初始化它两次是没有意义的

int j=0;
for(j=0; j<n; ++j) {// Inkrementierung und ; und n ausgebessert und J=0

这项宣言

double*vec[j] = &vec[j] * &vec[j];

是无效的。编译器发出相应的错误消息

squareVec.c:5:1: error:可变大小对象可能无法初始化双vec [j] = vec vec [j]; [j] *

,因为它认为这一行声明了一个可变长度数组,其中j个元素的类型为double *

相反,您需要编写像

这样的语句
vec[j] = vec[j] * vec[j];

这是你的功能。

void squareVec( double vec[], size_t n ) 
{
for ( size_t i = 0; i < n; ++i ) 
{
vec[i] = vec[i] * vec[i];
}
}

函数被称为

double vec[3] = {-1.0,2.0,0.0};
const size_t N = sizeof( vec ) / sizeof( *vec );
squareVec( vec,N );

最新更新