1

我试图理解我教授的代码的一部分。他举了一个硬件分配的例子,但我不知道如何理解这部分代码..

这是代码:

void addTask(TaskOrAssignment tasks[], int& taskCount, char *course, char *description, char *dueDate)
{
    tasks[taskCount].course = course;
    tasks[taskCount].description = description;
    tasks[taskCount].dueDate = dueDate;         
    taskCount++;
}

问题:“ tasks[taskCount].course = course;”是访问或声明 char 课程的位置吗?

我希望我能得到这个答案,而且我对这个网站也很陌生。

谢谢你。

4

3 回答 3

0

course是一个字符指针,它指向堆栈或堆中存储'\0'终止字符串的内存块。

tasks[taskCount].course也是一个字符指针,赋值只是让tasks[taskCount].course指向相同的内存地址course

于 2012-12-02T00:18:33.213 回答
0
tasks[taskCount].course = course;

让我们一次分解一下。首先,我们使用赋值运算符 (=) 将一个变量的值赋给另一个变量。

右边很简单,只是一个名为的变量course,它被声明为char*.

它被分配给变量tasks[taskCount].course。如果查看方法的参数,您可以看到它被声明为对象tasks数组。TaskOrAssignment所以tasks[taskCount]指的是这个数组的元素之一。.course末尾的 是指在该对象中命名的字段course。假设此代码编译,该字段char*TaskOrAssignment类中声明为 a。

最有可能的是,这两个course变量都代表一串字符。(这源于C。)当一切都说完了,两者都course指向tasks[taskCount].course同一个字符串缓冲区。

于 2012-12-02T00:27:01.147 回答
0

course是一个char*(指向 的指针char)。据推测,course成员TaskOrAssignment也是一个char*。该行所做的只是将值赋给数组中第th 个元素course的成员。coursetaskCount

据推测,该course参数旨在成为指向以空字符结尾的 C 样式字符串中的第一个字符的指针。所以在这个赋值之后,course数组元素的成员将指向同一个 C 风格的字符串。但是,当然,指针真的可以指向任何地方。

于 2012-12-02T00:29:36.800 回答