c中int指针的用法

时间:2013-11-29 19:39:57

标签: c pointers

当我调试我的操作系统时,我做了以下更改以杀死一个错误:

struct proc {
    int p_status;
};
int *status;   
struct proc *childP; 

在:

*status = childP->p_status;

我把它改为:

status = &childP->p_status;

然后操作系统正常工作。但是根据我的理解,不应该在之前和之后的工作相同吗?他们之间有什么区别?谢谢!

4 个答案:

答案 0 :(得分:0)

*status = childP->p_status; 表示:指定status指向childP->p_status

的内存位置

status = &childP->p_status; 表示:将status设置为指向childP->p_status

的内存位置

答案 1 :(得分:0)

*&运算符有些过载,这是一个很容易犯的错误。

typename * variable
//e.g.
int * status;

声明一个int类型的变量 - 在这种情况下,operator *绑定到typename并成为一个修饰符。

* variable

表示the contents of the address pointed to by 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;
}

现场演示:http://ideone.com/mmi9UH

有多种方法可以编写这些语句,有些程序员喜欢在声明变量时将*放在左侧

int* status;
int * status;
int *status;

都声明了相同的变量。但是,当您必须声明多个变量

时,它会使用第一个表单变为阴天
int* p1, p2;

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

int * p1, * p2;
int *p1, *p2;

声明两个指针。 Lefty-pointer-types倾向于

int* p1;
int* p2;

答案 2 :(得分:0)

如果status*status = childP->p_status;之前未指向已分配的内存,则表示您有错误。因为状态指针将指向未知的内存地址。

第二个选项意味着状态指向结构成员的相同地址。此指针的作用类似于别名 - &childP->p_status

的较短版本

答案 3 :(得分:0)

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

第二个,你用地址值加载状态,给struct一个具体的值来处理 - 在我看来,这是一个更好的方法。最好先设置指针本身的值而不是指针值。