这段代码的作用是什么?

时间:2014-05-14 07:36:22

标签: 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 Technology";

major[1][0] = "CS";
major[1][1] = "Computer Science";

4 个答案:

答案 0 :(得分:15)

  

此代码段的作用是什么?

它精心强奸了常见的C ++编程习语,并系统地破坏了代码的安全性。它是通过不必要地使用原始指针而不是使用标准容器对象(例如std::vector)来实现的。

  

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

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

int (*ptrToArr)[128];

你所拥有的是一个指向指针的指针。

  

那么第二行的指针呢?

没什么特别的。它只是new将分配的对象类型。

答案 1 :(得分:4)

这是

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";

希望能帮助你理解。

答案 2 :(得分:2)

那段代码太可怕了。

首先它隐藏了一些魔术索引号背后的语义 - &gt;使用结构/类来组织数据

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)
  {}
};

第二,它使用容易出错的手动内存管理 - &gt;使用c ++容器。

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 :: pair;

typedef std::pair<std::string, std::string> CourseDetails; // first = name, second = abbreiation
std::vector<CourseDetails> major;
major.push_back(CourseDetails("Information Technology", "IT"));
major.push_back(CourseDetails("Computer Science", "CS"));

std::cout<< major[0].first<< "/" << major[0].second<< std::endl

答案 3 :(得分:-5)

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