【问题标题】:Function Does nothing功能 什么都不做
【发布时间】:2014-06-13 18:32:30
【问题描述】:

我无法使函数 mostrarmatriz() 工作。该程序确实从头到尾编译和运行没有错误,但函数 mostrarmatriz() 没有显示任何内容。当我将该函数复制到主函数中时,它可以完美运行。看来我在通过引用传递值时遇到问题。请帮忙,我卡住了。

Main.c 文件:

#include "InvMatriz.h"
#include <stdio.h>

int main(int argc, char **argv)
{
    float **A;
    int n;
    printf("Ingrese el tamaño de la matriz: ");
    scanf("%d", &n);

    A = ingresematriz(n);
    void mostrarmatriz(A, n);
    printf("adfasd");

    return 0;
}

头文件 InvMatriz.h

#ifndef INVMATRIZ_H_
#define INVMATRIZ_H_

float** ingresematriz(int );
void mostrarmatriz(float**X ,int x);

#endif // INVMATRIZ_H

Ingrese Matriz.c 文件

#include "InvMatriz.h"
#include <stdio.h>



float **ingresematriz(int n)
{

    int i, j;

    //Asigna espacio en la memoria

    float **A;

    A = malloc(n * sizeof (float *));
    for (i = 0; i < n; i++)
    {
        *(A + i) = malloc(n * sizeof(float));
    }

    //Pide los elementos y los guarda

    for (i = 0; i < n; i++)
    {
        for (j = 0; j < n; j++)
        {
            printf("Elemento [%d] [%d]:  ", i + 1, j + 1);
            scanf("%f", *(A + i) + j);
        }
    }
    return A;
}

Mostrar Matriz.c 文件

#include "InvMatriz.h"
#include <stdio.h>

void mostrarmatriz(float **X , int x) //Porque no hace nada pero si compila?
{

    int i, j;
    for (i = 0; i < x; i++)
    {
        for (j = 0; j < x; j++)
        {
            printf("%f        ", *(*(X + i) + j));
        }
        printf("\n");


    }
}

【问题讨论】:

  • C 中没有传递引用之类的东西。只是指出这一点。还值得注意的是,除了“你的函数不起作用”这一事实之外,你的函数的其他几个部分严重缺乏,我很惊讶你的 malloc() 调用没有产生某种编译器警告。
  • 指针不是引用吗?
  • 丹尼尔在下面提供的答案实际上是您的函数未被调用的正确原因。不,它不是通过引用传递的。指针是存储变量的地址的值。您不是在传递对变量的引用,而是在传递一个值,该值是变量所在的地址。这可能看起来很挑剔,但有一些巨大的差异。
  • 由于它与您的问题无关,我不想将其作为答案发布,但 (A+i)=malloc(nsizeof(float));, *(A+i) 应替换为 A[i]。小细节,但在 64 位系统上,指针是 2 个字节,你会遇到麻烦。
  • @Happington 好奇:从 调用者 的角度来看,int a[5]; foo(a); 这与“通过引用”有何不同?

标签: c file parameter-passing pass-by-reference


【解决方案1】:

线

void mostrarmatriz(A,n);

不调用mostrarmatriz,但它声明了一个函数void mostrarmatriz(int,int)(参数的int 类型是旧的“隐式int”规则)。删除该行中的void,您的函数将被调用。

如果您在编译代码时出现警告,您的编译器会告诉您。

【讨论】:

    猜你喜欢
    • 2018-08-19
    • 2017-10-05
    • 1970-01-01
    • 1970-01-01
    • 2018-12-17
    • 2020-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多