int指针在c语言中的使用
调试操作系统时,我做了以下更改以消除一个bug: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-
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;