初始化使整数指针不带强制转换 - C

时间:2015-10-29 01:30:17

标签: c pointers

很抱歉,如果这篇文章不知道,但我对C仍然很新,所以我不太了解它。现在我正在试图找出指针。

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

然而,我收到的错误是。

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

据我了解,

#include <stdio.h>

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

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

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

4 个答案:

答案 0 :(得分:8)

使其工作重写代码如下 -

#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中,当您希望更改函数中变量的值时,您可以通过参考&#34;将变量传递给函数。你可以在这里阅读更多相关信息 - Pass by Reference

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

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

答案 1 :(得分:2)

也许你想这样做:

#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;
}

答案 2 :(得分:1)

#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;
}

答案 3 :(得分:0)

可能为时已晚,但作为其余答案的补充,仅为我的2美分:

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;
}

在指针声明中,您应该只分配其他变量的地址,例如&#34;&amp; a&#34; ..