【发布时间】: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