关于初始化从没有强制转换的整数生成指针:初始化从没有强制转换的整数生成指针 – C

Initialization makes pointer from integer without a cast - C

对不起,如果这篇文章被认为是无知的,但我对 C 还是很陌生,所以我对它的理解不是很深。现在我正在尝试找出指针。

我编写了这段代码来测试是否可以在更改函数中更改 b 的值,并通过传入指针将其结转回主函数(不返回)。

但是,我收到一条错误消息。

1
2
Initialization makes pointer from integer without a cast
    int *b = 6

据我了解,

1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdio.h>

int change(int * b){
     * b = 4;
     return 0;
}

int main(){
       int * b = 6;
       change(b);
       printf("%d", b);
       return 0;
}

我真的很担心修复这个错误,但如果我对指针的理解完全错误,我不会反对批评。


为了让它工作,重写代码如下 -

1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdio.h>

int change(int * b){
    * b = 4;
    return 0;
}

int main(){
    int b = 6; //variable type of b is 'int' not 'int *'
    change(&b);//Instead of b the address of b is passed
    printf("%d", b);
    return 0;
}

上面的代码可以运行。

在 C 语言中,当您希望更改函数中变量的值时,您"通过引用将变量传递给函数"。您可以在此处阅读更多相关信息 - 通过参考传递

现在错误意味着您试图将整数存储到作为指针的变量中,而不进行类型转换。您可以通过如下更改该行来消除此错误(但程序将无法运行,因为逻辑仍然是错误的)

1
int * b = (int *)6; //This is typecasting int into type (int *)

也许你想这样做:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>

int change( int *b )
{
  *b = 4;
  return 0;
}

int main( void )
{
  int *b;
  int myint = 6;

  b = &myint;
  change( &b );
  printf("%d", b );
  return 0;
}

1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdio.h>

int change(int * b){
     * b = 4;
     return 0;
}

int main(){
       int  b = 6; // <- just int not a pointer to int
       change(&b); // address of the int
       printf("%d", b);
       return 0;
}

也许为时已晚,但作为对其余答案的补充,只是我的 2 美分:

1
2
3
4
5
6
7
8
9
10
11
12
void change(int *b, int c)
{
     *b = c;
}

int main()
{
    int a = 25;
    change(&a, 20); --> with an added parameter
    printf("%d", a);
    return 0;
}

在指针声明中,你应该只分配其他变量的地址,例如"