int指针在c语言中的使用

int指针在c语言中的使用,c,pointers,C,Pointers,调试操作系统时,我做了以下更改以消除一个bug: struct proc { int p_status; }; int *status; struct proc *childP; 之前: *status = childP->p_status; 我把它改成: status = &childP->p_status; 那么操作系统就可以正常工作了。但就我的理解而言,之前和之后的工作不应该是一样的吗?他们之间有什么区别?谢谢大家! *status=childP-

调试操作系统时,我做了以下更改以消除一个bug:

struct proc {
    int p_status;
};
int *status;   
struct proc *childP; 
之前:

*status = childP->p_status;
我把它改成:

status = &childP->p_status;

那么操作系统就可以正常工作了。但就我的理解而言,之前和之后的工作不应该是一样的吗?他们之间有什么区别?谢谢大家!

*status=childP->p_status
方法:使用
childP->p_status
值指定
status
指向的内存位置

status=&childP->p_status

方法:将
状态设置为指向
childP->p_status的内存位置

*
&
运算符有些过载,很容易出错

typename * variable
//e.g.
int * status;
声明int类型的变量--运算符
*
在本例中绑定到typename并成为修饰符

* variable
表示变量所指向的地址的内容

#include <iostream>
int main() {
    char text[] = "hello, world!";
    char* p = text; // declare 'p' as a 'char*' and point it to 'h'
    *p = 'H'; // change the first letter of text to a capital
    std::cout << text << '\n';
    return 0;
}
它们都声明相同的变量。但是,当您必须声明多个变量时,使用第一种形式会变得模糊

int* p1, p2;
声明一个指针p1,但p2只是一个int

声明两个指针。左撇子指针类型通常

int* p1;
int* p2;

如果
status
未指向
*status=childP->p\u status之前的已分配内存那么你有一个bug。因为状态指针将指向未知的内存地址


第二个选项表示状态指向结构成员的相同地址。这个指针就像一个别名-一个较短版本的
&childP->p_status

我认为问题在于您试图在创建值之前访问它。当您尝试调用ChildP->p_status段时,您还没有真正将值加载到p_status中,因此结果是一个错误


第二种方法是用地址值来加载status,它为struct提供了一个具体的值来处理,在我看来,这是一种更好的方法。最好先设置指针本身的值,而不是指针的值。

给你一个提示:更改信封上的地址,使信件到达不同的房子,然后向同一地址发送不同的信件,两者之间有什么区别?@lkkeepmoving哈哈-是:)也修复了ideone演示。
int * p1, * p2;
int *p1, *p2;
int* p1;
int* p2;