-1

大家好,我在想是否可以将指针值分配给变量?基本上我有指向整数值的指针,我想将它分配给另一个变量。IE:

coursep->node = 1 //coursep is pointer to structure and node is structure variable
int var;
var = coursep->node; //I want variable to be 1

我可以这样做吗?如何?当我尝试这样分配它时,它似乎不起作用。

编辑:基本上我试图从指针值到数组或结构。

lines = lineCount(courses); //counts how many lines does file have
struct courses course[lines]; // creates array of structures with amount of lines

    for (i = 0; i < lines; i++) {
        struct courses *coursep;
        coursep = course;
        fscanf(co, " %c %d ", &coursep->courseName, &coursep->numberOfNodes);
        course[i].courseName = coursep->courseName;
        course[i].numberOfNodes = coursep->numberOfNodes;
        for (j = 0; j < coursep->numberOfNodes; j++) {
            fscanf(co, " %d", &(coursep->nodes[j]));
            var = *coursep->nodes[j];
            printf("%d\t", var);
        }
        fscanf(co, "\n");
    }

结构:

struct courses{
char courseName;
int numberOfNodes;
int nodes[];
};

我似乎无法将它直接放入数组中,因为它会打印出随机垃圾,如果我使用指针,它似乎显示正确的值(所有内容都是从文件中读取的),但是当我尝试将其全部放入数组时,它似乎会随机抛出再次垃圾=/有什么想法吗?

4

4 回答 4

2

当您在结构的末尾声明一个空数组成员时,它是一个灵活数组成员

根据 ISO/IEC 9899:TC3第 6.7.2.1 节结构和联合说明符,约束 16

作为一种特殊情况,具有多个命名成员的结构的最后一个元素可能具有不完整的数组类型;这称为灵活数组成员. 在大多数情况下,灵活数组成员被忽略。特别是,结构的大小就像省略了柔性数组成员一样,只是它可能具有比省略所暗示的更多的尾随填充。然而,当一个 . (或->)运算符的左操作数是(指向)具有灵活数组成员的结构,右操作数命名该成员,它的行为就像该成员被替换为最长的数组(具有相同的元素类型) 不会使结构大于被访问的对象;数组的偏移量应保持灵活数组成员的偏移量,即使这与替换数组的偏移量不同。如果这个数组没有元素,它的行为就好像它有一个元素,但如果尝试访问该元素或生成一个越过它的指针,则行为是不确定的。


在您的情况下,我认为没有必要使用灵活的数组成员。您可以更改int nodes[]to的定义,并在循环int* nodes中为 for 分配内存。nodesfor

于 2012-12-14T03:08:00.130 回答
0

试试这个

int *var;
var = &coursep->node;
于 2012-12-14T01:54:24.983 回答
0

您需要将nodes成员变量更改为指针而不是数组,并在分配给该数组之前为该数组分配内存:

struct courses{
  char courseName;
  int numberOfNodes;
  int *nodes;
};

...

course[i].nodes = malloc(sizeof(int) * course[i].numberOfNodes);

(或类似的东西)

于 2012-12-14T02:44:34.850 回答
0

这段代码的一个问题是它coursep总是指向course数组的第一个元素:

struct courses course[lines]; 

for (i = 0; i < lines; i++) {
    struct courses *coursep;
    coursep = course;
    /* ... */
}

...这意味着该数组中的几乎所有内容都可能是垃圾。

于 2012-12-14T02:52:21.007 回答