为什么我们真的需要特别是 C++ 编程中的指针
Why do we really need pointers in Programming specifically C++
我真的无法理解动态分配和静态分配之间的区别,他们说动态分配在执行程序时发生,而静态分配仅在编译时发生,我们不能在执行时手动分配但是,
#include <iostream>
using namespace std;
int main()
{
int size , a = 0;
cout << "Enter the size of Array: ";
cin >> size;
int A[size][size];
for(int i = 0 ; i < size ; i++)
{
for(int j = 0 ; j < size ; j++)
cout << a++ << '\t';
cout << endl;
}
system("pause");
return 0;
}
此程序将在执行时分配数组大小。
动态分配的真正意义在于您可以控制被分配对象的生命周期。动态分配的对象存在,直到您取消分配它们。这与数组没有任何关系,尽管这通常是初学者首先学习分配的背景。
考虑这两个函数
int* bad()
{
int x = 123;
return &x;
}
int* good()
{
int* x = new int(123);
return x;
}
这两个函数都创建一个 int 和 return 指向该 int 的指针。
bad
函数不正确,因为 x 变量在函数退出时被销毁,所以它 return 是指向已被销毁的对象的指针。
good
函数动态创建一个int,该对象永远不会被销毁(除非程序删除它)。所以这个函数是正确的。
顺便提一下,int size; ... int A[size][size];
不是合法的 C++。一些编译器允许它,但其他编译器不允许。
我真的无法理解动态分配和静态分配之间的区别,他们说动态分配在执行程序时发生,而静态分配仅在编译时发生,我们不能在执行时手动分配但是,
#include <iostream>
using namespace std;
int main()
{
int size , a = 0;
cout << "Enter the size of Array: ";
cin >> size;
int A[size][size];
for(int i = 0 ; i < size ; i++)
{
for(int j = 0 ; j < size ; j++)
cout << a++ << '\t';
cout << endl;
}
system("pause");
return 0;
}
此程序将在执行时分配数组大小。
动态分配的真正意义在于您可以控制被分配对象的生命周期。动态分配的对象存在,直到您取消分配它们。这与数组没有任何关系,尽管这通常是初学者首先学习分配的背景。
考虑这两个函数
int* bad()
{
int x = 123;
return &x;
}
int* good()
{
int* x = new int(123);
return x;
}
这两个函数都创建一个 int 和 return 指向该 int 的指针。
bad
函数不正确,因为 x 变量在函数退出时被销毁,所以它 return 是指向已被销毁的对象的指针。
good
函数动态创建一个int,该对象永远不会被销毁(除非程序删除它)。所以这个函数是正确的。
顺便提一下,int size; ... int A[size][size];
不是合法的 C++。一些编译器允许它,但其他编译器不允许。