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)
要指向表达式的值,(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)