我在 2D 数组的动态内存分配中遇到了一些奇怪的代码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];
其中 p 是一个指针并声明为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)
之间的区别在很大程度上是无关紧要的,编译器将两者视为相同,并且发出的机器代码是相同的。[]
表示法只是一个语法元素,有助于使代码更易于遵循。
相关文章:
- 请解释"函数1(p1,p2,p3);"的输出
- 请解释这句话(cout<<1+int((a<b)^((b-a)&1) )<<endl
- 被解释为低级别const的const对象的地址
- 计算每个节点的树高,帮助我解释这个代码解决方案
- MSVC将仅移动结构参数解释为指针
- 内联程序集printf将整数解释为地址
- 有人能解释一下为什么下界是这样工作的吗C++的
- Visual Studio(或任何其他工具)能否将地址解释为调用堆栈(boost上下文)的开头
- 我是c ++的新手,你能解释一下在这种情况下的指针吗
- 有人能为我解释一下C++代码吗
- 你能解释一下什么运行时错误是如何解决它的吗?
- 请解释字谜的代码,我看不懂计数器数组,每个值已经是0
- 有人可以向我解释为什么控制台输出 0 吗?
- 有人可以解释一下这段代码如何能够反转字符串
- 在 C++ 中解释多维向量的语句时感到困惑
- 解释一下 for (char c : str) 的作用?
- 确切地说,如何解释 std::getline(stream, string) 函数在C++中填充的字符串
- 隐式重新解释引用时强制转换,没有警告/错误
- 有人可以在 c++ 中解释数组的这种输入
- 有人可以解释一下这个矩阵幂函数是如何工作的吗?