3
typedef struct
{
  char *s;
  char d;
}EXE;
EXE  *p;

对于上面struct我如何用指针初始化结构?我知道我们做的非指针EXE a[] = { {"abc",1}, {"def",2} };。同样,分配内存后是否可以使用指针?说喜欢p[] = { {"abc",1},.. so on}。基本上我想动态初始化。谢谢。

4

3 回答 3

7

我们可以用指针初始化结构,如下所示

example:
 int i;
 char e[5]="abcd";
 EXE *p=malloc(sizeof(*p));
 for(i = 0;i < 5;i++)
   *(p+i)=(EXE){e,i+48};
于 2013-08-05T09:45:36.937 回答
1

首先,您需要为此分配一些内存,char *然后使用strcpy库函数复制结构元素的数据。

p->s = strcpy(s,str);  //where str source, from where you need to copy the data

我希望这将有所帮助。虽然我可以给你完整的代码,但我希望你尝试一下。

您可以使用此 动态分配 C 结构吗?

这是一个重复的问题。

于 2013-08-05T09:28:53.257 回答
1

您必须了解分配的指针是如何工作的:

  1. 假设您已经为三个 structs 分配了内存Ptr = malloc(3*sizeof(EXE))
  2. 然后当你将 1 添加到 Ptr 时,它会进入下一个结构。您有一块内存除以 3(每个结构有 3 个较小的内存块)。
  3. 因此,需要访问第一个结构的元素,然后将指针移动到下一个。

在这里你可以了解它是如何工作的:

#include <stdio.h>
#include <stdlib.h>

typedef struct {
    char *s;
    char d;
} EXE;

int main()
{
    int i;
    EXE *Ptr;

    Ptr = malloc(3*sizeof(EXE)); // dymnamically allocating the
                                 // memory for three structures
    Ptr->s = "ABC";
    Ptr->d = 'a';

//2nd
    Ptr++;     // moving to the 2nd structure
    Ptr->s = "DEF";
    Ptr->d = 'd';

//3rd
    Ptr++;    // moving to the 3rd structure
    Ptr->s = "XYZ";
    Ptr->d = 'x';

//reset the pointer `Ptr`
    Ptr -= 2; // going to the 1st structure

//printing the 1st, the 2nd and the 3rd structs
    for (i = 0; i < 3; i++) {
        printf("%s\n", Ptr->s);
        printf("%c\n\n", Ptr->d);
        Ptr++;
    }   

    return 0;
}

注意: - 如果您有一个结构变量,请使用.操作符来访问元素。- 如果您有一个指向结构的指针,请使用->运算符来访问元素。

     #include <stdio.h>
     #include <stdlib.h>

     struct EXE {
         int a;
     };

     int main(){

    struct EXE variable;
    struct EXE *pointer;

    pointer = malloc(sizeof(struct EXE)); // allocating mamory dynamically 
                                      // and making pointer to point to this
                                      // dynamically allocated block of memory
    // like here
    variable.a = 100;
    pointer->a = 100;

    printf("%d\n%d\n", variable.a, pointer->a);

    return 0;
    }
于 2013-08-05T11:32:35.147 回答