typedef struct
{
char *s;
char d;
}EXE;
EXE *p;
对于上面struct
我如何用指针初始化结构?我知道我们做的非指针EXE a[] = { {"abc",1}, {"def",2} };
。同样,分配内存后是否可以使用指针?说喜欢p[] = { {"abc",1},.. so on}
。基本上我想动态初始化。谢谢。
typedef struct
{
char *s;
char d;
}EXE;
EXE *p;
对于上面struct
我如何用指针初始化结构?我知道我们做的非指针EXE a[] = { {"abc",1}, {"def",2} };
。同样,分配内存后是否可以使用指针?说喜欢p[] = { {"abc",1},.. so on}
。基本上我想动态初始化。谢谢。
我们可以用指针初始化结构,如下所示
example:
int i;
char e[5]="abcd";
EXE *p=malloc(sizeof(*p));
for(i = 0;i < 5;i++)
*(p+i)=(EXE){e,i+48};
首先,您需要为此分配一些内存,char *
然后使用strcpy
库函数复制结构元素的数据。
p->s = strcpy(s,str); //where str source, from where you need to copy the data
我希望这将有所帮助。虽然我可以给你完整的代码,但我希望你尝试一下。
您可以使用此 动态分配 C 结构吗?
这是一个重复的问题。
您必须了解分配的指针是如何工作的:
Ptr = malloc(3*sizeof(EXE))
。在这里你可以了解它是如何工作的:
#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;
}