在 c 段错误中使用指针指向变量

Use*_*833 0 c pointers segmentation-fault

我希望指针 p 指向 (var-1) 的值。请提出解决此错误的方法。

  int var = 10;
  int *p;
  *p =var-1;
  printf("%d",*p);
Run Code Online (Sandbox Code Playgroud)

Vla*_*cow 5

要指向表达式的值,(var-1)您需要一个存储该值的对象。

因此,如果变量var本身不得更改,唯一的方法是以下

  int var = 10;
  int var2 = var-1;
  int *p = &var2;
  printf("%d",*p);
Run Code Online (Sandbox Code Playgroud)

或者您可以动态分配一个 int 类型的对象,其中表达式的结果将被存储,如

  int var = 10;
  int *p = malloc( sizeof( int ) );
  *p = var-1;
  printf("%d",*p);
  //...
  free( p );
Run Code Online (Sandbox Code Playgroud)

根据 C 标准(6.5.3.2 地址和间接运算符)

1一元 & 运算符的操作数应为函数指示符、[] 或一元 * 运算符的结果,或指定不是位字段且未使用寄存器存储类声明的对象的左值说明符。

4 一元 * 运算符表示间接。如果操作数指向一个函数,则结果是一个函数指示符;如果它指向一个对象,则结果是一个指定该对象的左值。如果操作数的类型为“指向类型的指针”,则结果的类型为“类型”。如果为指针分配了无效值,则一元 * 运算符的行为未定义。

在原始代码片段中,您遇到了分段错误,因为指针p未指向有效对象并且由于未初始化而具有不确定的值。

int *p;
*p =var-1;
Run Code Online (Sandbox Code Playgroud)