我在 C++ 中二维数组的动态内存分配中遇到了一些奇怪的代码?请解释一下这是什么?
I encountered some thing weird code in Dynamic memory allocation for 2D arrays in C++? please explain me what is this?
code:- p = new int *[5];
where p is a pointer & declared as int **P;
请解释一下为什么有一个 *
在 new 和 [5] 之间。
使用new
分配数组时需要指定类型。一般模式是:
type* x = new type[n];
其中type
是基类型,x
是变量,n
是条目数。您可以通过在两边添加 *
使其成为指针类型:
type** x = new type*[n];
您可以无限期地继续:
type**** x = new type***[n];
尽管在实践中你很少会看到这种情况,因为像这样的过深结构只会带来麻烦。
在 C++ 中,由于继承了 C 的优点,指针和数组是可以互换的,因为这两种定义基本上是等价的:
void f(int* x)
void f(int x[])
在内部,您可以将 x
用作指针或数组,或两者兼而有之:
int y = x[0];
int z = *x;
同样这些是相同的:
int y = x[1];
int z = *(x + 1);
一般来说,x[n]
和 *(x + n)
之间的区别在很大程度上是无关紧要的,编译器将两者视为相同的,并且发出的机器代码是相同的。 []
符号只是一个语法元素,有助于使代码更易于理解。
code:- p = new int *[5];
where p is a pointer & declared as int **P;
请解释一下为什么有一个 *
在 new 和 [5] 之间。
使用new
分配数组时需要指定类型。一般模式是:
type* x = new type[n];
其中type
是基类型,x
是变量,n
是条目数。您可以通过在两边添加 *
使其成为指针类型:
type** x = new type*[n];
您可以无限期地继续:
type**** x = new type***[n];
尽管在实践中你很少会看到这种情况,因为像这样的过深结构只会带来麻烦。
在 C++ 中,由于继承了 C 的优点,指针和数组是可以互换的,因为这两种定义基本上是等价的:
void f(int* x)
void f(int x[])
在内部,您可以将 x
用作指针或数组,或两者兼而有之:
int y = x[0];
int z = *x;
同样这些是相同的:
int y = x[1];
int z = *(x + 1);
一般来说,x[n]
和 *(x + n)
之间的区别在很大程度上是无关紧要的,编译器将两者视为相同的,并且发出的机器代码是相同的。 []
符号只是一个语法元素,有助于使代码更易于理解。