【发布时间】:2014-05-05 18:15:24
【问题描述】:
我正在读高中三年级,目前正在学习 C++。 由于我们已经完成了我们需要了解的有关一般编程的所有内容(循环、if 语句、函数、结构、数组和二维数组),我们开始使用二进制/文本文件,我认为在学习文件的同时学习内存管理。 首先,我现在正在尝试学习指针,因为如果我理解正确,在 OOP 中它们是必须的。 其次,我想知道计算机是如何工作的,发生的事情背后是什么。 现在,我做了一小段代码
int main()
{
char y;
char *x;
x = &y;
cout << "Write a word: ";
cin >> x;
cout << x << endl;
system("pause");
return 0;
}
它可以工作,但是当程序关闭时,我收到一个错误,指出变量“y”周围的堆栈已损坏。 如果我不混淆,堆栈是动态内存,堆是静态内存,考虑到我收到此错误是因为程序关闭时变量 y 不在内存中。 我走对了吗?
另外,还有一个问题。 我不明白何时以及为什么应该使用指针,例如:
int main()
{
int number = 10;
int* pointer;
pointer = &number;
*pointer = 15;
cout << *pointer << endl;
system("pause");
return 0;
}
为什么我不能简单地这样做:
int main()
{
int number = 10;
number = 15;
cout << number << endl;
}
为什么要使用指针?另外,我不明白为什么如果我创建一个 char* 并分配它,例如“hello”它写的是 hello 而不是 h。 基本上,通过声明一个 char* 我声明了一个大小未知的数组,对吧?请告诉我它的确切作用。
【问题讨论】:
-
指针对于 OOP 来说是必须的——仅在 C++ 中:)
-
@juanchopanza:非拥有指针?尽管如此,新手还是会严重过度使用原始 ponters。
-
Newbs 过度使用指向我在生产代码中看到的
{vector<T> *v = new vector<T>; /*use vector*/ delete v;}的指针。我责怪Java。它的new关键字不仅是完全多余的语法,它还让程序员认为用任何有它的语言都需要创建对象。 -
一位新用户提出的好问题。好久没看到了:)
-
@larsmans 显然是not entirely redundant,但可能更多的是偶然而不是设计:-) 但我完全同意你的看法。