C++ 这个代码段做什么?

C++ 这个代码段做什么?,c++,pointers,dynamic-memory-allocation,C++,Pointers,Dynamic Memory Allocation,这个程序是一个学生数据库。这部分代码存储了学生的专业(计算机科学和信息技术)。我不知道代码是怎么做的。我从未在动态内存分配中遇到过这种格式。好的,第一行是指向数组的指针吗?第二行的指针呢 string ** major; major = new string*[3]; for(int i = 0; i < 3; i++) major[i] = new string[2]; major[0][0] = "IT"; major[0][1] = "Information Tec

这个程序是一个学生数据库。这部分代码存储了学生的专业(计算机科学和信息技术)。我不知道代码是怎么做的。我从未在动态内存分配中遇到过这种格式。好的,第一行是指向数组的指针吗?第二行的指针呢

    string ** major;
major = new string*[3];
for(int i = 0; i < 3; i++)
    major[i] = new string[2];

major[0][0] = "IT";
major[0][1] = "Information Technology";

major[1][0] = "CS";
major[1][1] = "Computer Science";
string**major;
主要=新字符串*[3];
对于(int i=0;i<3;i++)
主[i]=新字符串[2];
专业[0][0]=“IT”;
专业[0][1]=“信息技术”;
主修[1][0]=“CS”;
专业[1][1]=“计算机科学”;
这个代码段做什么

< >它精心地强奸了普通的C++编程习语,并有损于代码的安全性。它通过不必要地使用原始指针而不是使用标准容器对象(如
std::vector
)来实现

好的,第一行是指向数组的指针吗

否,指向数组的指针如下所示:

int (*ptrToArr)[128];
您拥有的是指向指针的指针

第二行的指针呢

    string ** major;
major = new string*[3];
for(int i = 0; i < 3; i++)
    major[i] = new string[2];

major[0][0] = "IT";
major[0][1] = "Information Technology";

major[1][0] = "CS";
major[1][1] = "Computer Science";
没什么特别的。这只是
new
将分配的对象类型。

在这里

string ** major; // Create a variable that *could* be used like a 2 dimensions array
major = new string*[3]; // Allocate the first dimension
for(int i = 0; i < 3; i++)
    major[i] = new string[2]; // Allocate the second dimension

// Add some values
major[0][0] = "IT";
major[0][1] = "Information Technology";

major[1][0] = "CS";
major[1][1] = "Computer Science";
string**major;//创建一个*可以*像二维数组一样使用的变量
major=新字符串*[3];//分配第一个维度
对于(int i=0;i<3;i++)
主[i]=新字符串[2];//分配第二维度
//添加一些值
专业[0][0]=“IT”;
专业[0][1]=“信息技术”;
主修[1][0]=“CS”;
专业[1][1]=“计算机科学”;

希望这能帮助您理解。

第一行是指向字符串指针数组的指针。在第二行中,这段代码将内存(字符串指针类型)分配给“major”。在循环中,这段代码将memeory(字符串类型)分配给“major”数组中的每个成员(指针)。

这段代码太可怕了

首先,它将语义隐藏在一些神奇的索引号后面-->使用结构/类来组织数据

struct CourseDetails{
  std::string name;
  std::string abbrev;

  // default constructor
  CourseDetails(){}

  // constructor that inits variables
  CourseDetails(const std::string& i_name, const std::string& i_abbrev)
  : name(i_name)
  , abbrev(i_abbrev)
  {}
};

第二,使用易出错的手动内存管理->使用C++容器。< /P>

std::vector<CourseDetails> major;
major.push_back(CourseDetails("Information Technology", "IT"));
major.push_back(CourseDetails("Computer Science", "CS"));

std::cout<< major[0].name << "/" << major[0].abbrev<< std::endl
std::向量专业;
主修。推回(课程详情(“信息技术”、“IT”);
主修。推回(课程详情(“计算机科学”、“CS”);

coutIt是一个动态数组-3行2列,其中每个元素是一个
字符串。注意,它不是好的C++,虽然风格上是使用裸C风格数组,而不是一个合适的类型,比如vector,所以它有所有潜在的内存泄漏C问题,等等。我认为C++手册/教程(这里也有好的列表)。“关于指针和内存分配”将不仅仅是一个关于StackOverflow的简短回答。@PaulR我认为值得一提的是,它不是一个数组,但它试图模拟一个数组。