gpt4 book ai didi

C++指针: dereferencing,赋值等

转载 作者:行者123 更新时间:2023-11-30 01:52:36 27 4
gpt4 key购买 nike

我问的问题非常基础,但我试图通过在编译器中做练习来理解 C++ 中指针的行为。因此,例如,我首先声明一个 int 指针 *p 并尝试为其赋予一些值并打印它:

#include <iostream>
using namespace std;

int *p, i;
int main(){
i=5;
p=&i;
cout<<*p<<endl;
return 0;
}

这很清楚也很容易,对吧?但是当我想知道为什么 C++ 语法以这种方式工作时,我测试了另一种为指针赋值的方法:

#include <iostream>
using namespace std;

int *p, i;
int main(){
i=5;
p=&i;
*p=3;
cout<<*p<<endl;
return 0;
}

很明显,现在的结果不一样了。问题是,为什么这行不通:

#include <iostream>
using namespace std;

int *p, i;
int main(){
*p=3;
i=5;
p=&i;
cout<<*p<<endl;
return 0;
}

为什么我必须先取消对指针的引用,然后再为其赋值,但如果不取消引用,直接赋值就无法工作?

另外,如果在我写的第二个例子中我添加了另一个赋值:

int main(){
i=5;
p=&i;
*p=3;
*p=6;
cout<<*p<<endl;
return 0;
}

这不会改变存储在 *p 的值(它仍然是 3)。我不想简单地通过记住这个指针行为来学习,我有兴趣了解它为什么这样工作。谢谢。

最佳答案

#include <iostream>
using namespace std;

int *p, i;
int main(){
*p=3;
i=5;
p=&i;
cout<<*p<<endl;
return 0;
}

这不起作用,因为您正试图为 p 指向的整数赋值。这就是这一行的作用:

*p = 3;

这意味着,“将值 3 存储在 p 指向的位置”。但是 p 没有指向任何东西,因为直到两行之后你才指定它指向任何东西。

p = &i;

这意味着,“将 i 的地址分配给 p 的值”。或者,换句话说,“将 i 的地址存储在 p 中”。 p 需要指向某些东西,然后才能分配给 p 指向的东西。否则你有未定义的行为。

最后一节:

int main(){
i=5;
p=&i;
*p=3;
*p=6;
cout<<*p<<endl;
return 0;
}

你这样说:“这不会改变存储在 *p 中的值(它仍然是 3)。” ——我不知道你为什么这么说。是的,它会更改存储在 *p 中的值(即 i 的值)。它将它更改为 6。

关于C++指针: dereferencing,赋值等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24341724/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com