关于指针的一些问题

use*_*299 4 c++ pointers

我现在是高中三年级,而且我正在学习C++.由于我们已经完成了我们需要了解的一般编程(循环,if语句,函数,结构,数组和二维数组),我们启动了二进制/文本文件,我想我们学习文件学习内存管理.首先,我现在正在努力学习指针,因为如果我理解正确的话,在OOP中它们是必须的.其次,我想知道计算机是如何工作的,背后发生了什么.现在,我制作了这段小代码

int main()
{
    char y;
    char *x;
    x = &y;
    cout << "Write a word: ";
    cin >> x;
    cout << x << endl;
    system("pause");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

并且它可以工作,但是当程序关闭时,我得到一个错误,表示变量'y'周围的堆栈已损坏.如果我没有混淆,堆栈是动态内存,堆是静态内存,考虑到我收到此错误,因为当程序关闭时变量y不在内存中.我在正确的道路上吗?

还有一个问题.我无法理解何时以及为什么我应该使用指针,例如:

int main()
{
    int number = 10;
    int* pointer;
    pointer = &number;
    *pointer = 15;
    cout << *pointer << endl;
    system("pause");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

为什么我不能简单地这样做:

int main()
{
    int number = 10;
    number = 15;
    cout << number << endl;
}
Run Code Online (Sandbox Code Playgroud)

我为什么要使用指针?另外,我不明白为什么如果我创建一个char*并分配它,例如"hello"它写的是hello而不是h.基本上,通过声明一个char*我声明一个大小未知的数组,对吧?请告诉我它究竟是做什么的.

Fre*_*Foo 5

当程序关闭时,我得到一个错误,表示变量'y'周围的堆栈已损坏

因为通过接受整个字符串>>来响应a char*.指针必须指向足够大的缓冲区来保存该字符串,但它只指向堆栈变量x.>>不知道这一点,所以它只是提前收费并写入x堆栈旁边的任何内容.

实际上,std::string在这种情况下你最好使用:

std::string s;
std::cin >> s;
Run Code Online (Sandbox Code Playgroud)

从中读取一个单词cin.

为什么我不能简单地这样做

您可以.在这个简单的程序中你不需要指针,但是你需要它们才能获得更高级的东西.即使你不经常使用它们(现代C++有很多设施可以通过更安全和更容易的构造来替换字符串),但仍然有助于知道std::string,例如,使用指针实现:它实际上是一个char*包含在类中的关心>>你的事情.char*如果需要更多空间来存储额外的字符,该类知道点的位置并进行调整.