c++ - 动态内存分配表现怪异
问题描述
我刚刚发现我不能写这样的代码
#include <iostream>
using namespace std;
int main()
{
int* a, b;
int N;
cin >> N;
a = new int[N];
b = new int[N];
}
但我不明白为什么:
int*a, b;
错了,什么是b
类型?
解决方案
将我的评论作为答案:
b
s 类型是int
,不是int*
你想象的那样。这是不在同一行声明多个变量的一个很好的理由。在单行上执行此操作的正确方法是int *a, *b;
如果您想了解更多,这里列出了规则。在您的示例int
中,在decl-specifier-seq
类别中并且*a, *b
在 init-declarator-list
类别中。
最好的方法当然是在声明变量时初始化变量以避免潜在的错误:
int main() {
int N = 0;
std::cin >> N;
int* a = new int[N];
int* b = new int[N];
//dont forget to delete
delete[] a;
delete[] b;
return 0;
}
推荐阅读
- leaflet - Leaflet.js - 关于折线的问题
- php - 如何在 wordpress 多站点设置中自定义新站点的默认设置?
- docker - Docker compose,单独运行时不能与暴露的端口通信?
- woocommerce - 在 WooCommerce 中完全删除排序方式下拉列表
- amazon-web-services - 如何使用 API 网关和 lambda 为移动设备设置多个环境?
- php - 如何在 Google Cloud Platform Stackdriver Logging API 中获取“页面大小”选项以返回带有下一页令牌的分页条目
- javascript - 在具有自定义输出的 Highcharts 中使用柱形图类型?
- android - 广播接收器中的意图额外 EXTRA_INCOMING_NUMBER,格式
- javascript - StaticInjectorError [HttpClent]:不支持函数/类
- hadoop - HDFS 高可用性的行为