c - [C 编程] vector 和指针

标签 c arrays pointers

我不知道问题出在哪里,但最新的指针( vector )有一些问题。 第一个值可以 (V[0]+T[0])S[1] 始终为 0,第三个值是随机的。

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

int citire_vector(int n, int *V);
void afisare_vector(int n, int *V);
int produs_scalar(int n, int *V, int *T);
int suma_vectori(int n, int *V, int *T);

int main(void)
{
    int n, *X, *Y, ps, *S;
    printf("n = ");
    scanf("%d",&n);

    X = (int*) malloc(n*sizeof(int));
    Y = (int*) malloc(n*sizeof(int));

    citire_vector(n,X);
    citire_vector(n,Y);
    afisare_vector(n,X);
    afisare_vector(n,Y);

    ps = produs_scalar(n,X,Y);
    printf("Produsul scalar = %d\n",ps);

    S = (int*) malloc(n*sizeof(int));
    *S= suma_vectori(n,X,Y);
    afisare_vector(n,S);

}

int citire_vector(int n, int *V)
{
    int i;

    for(i=0;i<n;i++)
        scanf("%d",V+i);

    return *V;
}

void afisare_vector(int n, int *V)
{
    int i;
    printf("Valorile vectorului sunt:\n");
    for(i=0;i<n;i++)
        printf("%d ",*(V+i));
    printf("\n");
}

int produs_scalar(int n, int *V, int *T)
{
    int i, ps = 0;
    for(i = 0;i<n;i++)
        ps += (*(V+i))*(*(T+i));
    return ps;
}

int suma_vectori(int n, int *V, int *T)
{
    int i, *U;
    for(i=0;i<n;i++)
    {
        *(U+i )= *(V+i);
    }
    return *U;
}

最佳答案

您的suma_vectori并且其用法不正确。

  • 指针U里面suma_vectori未初始化,导致赋值时未定义的行为
  • 作业 *S= suma_vectori(n,X,Y)对于 S 的初始元素没有任何影响

要解决此问题,请更改 suma_vectori返回int* ,移动malloc函数内的结果,删除 malloc对于 S ,并分配 S suma_vectori 的结果调用:

int *suma_vectori(int n, int *V, int *T); // forward declaration

int *suma_vectori(int n, int *V, int *T) { // Implementation
    int *U = malloc(n*sizeof(int)); // do not cast malloc
    for(int i=0;i<n;i++) {
        U[i] = V[i] + T[i];
    }
    return U;
}

// call
S= suma_vectori(n,X,Y);

// Don't forget to free malloc-ed memory
free(X);
free(Y);
free(S);

关于c - [C 编程] vector 和指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36203701/

相关文章:

c++ - OpenCL 内存访问

c - C,读取文件,解释文件,将解释输出到新文件中

java - 如何在 Java 中对整数进行排序而不使其成为数组或列表?

arrays - 如何获取数组的一个或多个维度的每个索引?

c# - 为什么在这种情况下为 for 循环使用指针性能更高?

c++ - 适用于 begin() 但不适用于 rbegin() 的映射迭代器

C Hello world : Code Blocks IDE, Windows 上的 MinGW C 编译器

c - 如何使用 fork() 创建特定进程?

C 固定数组指向数组的一部分

有人可以回顾一下这个练习吗?我是对的,但想澄清一些事情