我收到错误请帮我解决此错误..我已编写下面的代码

时间:2011-02-15 06:28:17

标签: c

#include<stdio.h>
void main()
{
    int *j;
    void fun(int);
    fun(&j);
}
void fun(int *k)
{
    int a=10;
    k=&a;
    printf("%d\n%d\n%d\n",k,&a,*k);
}

7 个答案:

答案 0 :(得分:2)

你需要在主

之前有一个有趣的“前瞻声明”
void fun(int* k);
int main()
{
...

答案 1 :(得分:1)

也许这会帮助您了解正在发生的事情......

在Main()中声明是好的,你的问题是它不正确。它不遵循您的使用。 当你调用fun()时,你正在向它传递一个int **,你的声明说fun()接受一个int而不是一个int **。

你已经声明了一个int * j,然后当你把它传递给乐趣时,你传递(指针的地址,最终是一个int **)。这不是宣言所说的。

提示:打印指针值时,请使用%p而不是%d。

当我完成输入时,每个答案都已经有了相同的东西......: - )

答案 2 :(得分:0)

我想知道,您想用该代码做什么? 我想到了这个:

#include<stdio.h>
void fun(int*);
int main()
{
    int j;
    fun(&j);
    return 0;
}
void fun(int *k)
{
    int a=10;
    k=&a;
}
这是你想要的吗? 因为你的代码中有一些奇怪的东西:

  1. 您在main()
  2. 中声明了void fun(int)
  3. 函数fun采用指针,而不是int
  4. 您尝试使用%d打印地址(通常使用%p?)
  5. 您将* j的地址传递给fun(int *)

答案 3 :(得分:0)

您需要在fun()之前声明main()的原型,而不是main()。原型的参数列表和函数定义也需要相同。当您致电fun()时,您需要传递正确类型的参数。您需要传递int *,而您传递int **

但是,即使您修复了这些明显的错误,您的程序也可能无法达到预期效果。你真的需要了解指针以及如何使用它们。

答案 4 :(得分:0)

添加其他答案中指出的问题,

int *j;

您声明j哪些指向int类型变量。

fun(&j);

您正在将指针变量(int**)的地址传递给期望int*

的函数

建议: 改为

void fun(int **k){ //Need to change declaration. Plus, the rest of the fun(..) body wouldnt make much sense though.

或致电

fun(j);

答案 5 :(得分:0)

我会在这里列出一些错误。

    void fun(int);

此声明与实际功能定义不匹配,后者需要int *

    fun(&j);

这与上面的声明或实际的函数定义不匹配。它传递指针的地址,或int **

    printf("%d\n%d\n%d\n",k,&a,*k);

请勿使用%d打印地址。请改用%p

答案 6 :(得分:0)

除了编译器会警告你的所有事情 - 函数声明不匹配定义,将错误类型的参数传递给fun,将错误的参数传递给printf等等你正试图做的事情无论如何都是愚蠢的在堆栈中,因此一旦fun返回,存储在j中的int的地址将无效。