我需要为指针分配一个int值,我该怎么做?
以下是我想要的一个小例子。
struct {
int a;
} name;
int temp = 3;
struct name *obj = NULL;
现在,我需要将此值'3'分配给struct的'a'。
答案 0 :(得分:4)
用
struct {
int a;
}name;
你已经定义了一个struct变量,它为struct分配内存(例如,当它是函数内的局部变量时,在堆栈上)。然后,使用int temp = 3;
,分配给结构成员就足够了
name.a = temp;
如果您只想声明结构类型,请使用
struct name {
int a;
};
然后,您可以根据此类型定义任意数量的结构变量,例如
struct name theName;
并按上述方式对theName
成员执行相同的操作:
theName.a = temp;
或者,您可以定义指向结构的指针,然后自己分配内存:
struct name *namePtr;
namePtr = malloc(sizeof(struct name));
namePtr->a = temp;
另请注意,您已使用C
和C++
标记了问题 - 尤其是结构,您应该决定使用哪种语言 - 请参阅Differences between struct in C and C++。
答案 1 :(得分:2)
声明指向struct的指针不会为它保留内存,所以首先必须这样做。例如:
obj = malloc(sizeof(*obj));
现在您可以指定值:
obj->a = temp;
请注意,当前的程序没有定义“struct name”,它定义了一个名为“name”的变量,它包含一个struct。这可能不是你想要的。
答案 2 :(得分:1)
代码的基本问题是name
不是结构的名称,而是结构的名称或变量,其名称已经定义。
如果您不想为结构命名,那么即使这样仍然需要分配内存。
struct
{
int a;
}name, *obj;
int temp = 3;
int main()
{
obj=&name; // 'obj' is pointing to memory area of 'name' : Keep this in mind throughout the code
obj->a=temp;
printf("%d %u %d",temp,&temp,obj->a);
return 0;
}
最佳选择是在结构中添加名称,然后在分配内存后使用其指针
typedef struct
{
int a;
}name;
int temp = 3;
name *obj = NULL;
int main()
{
obj = (name *)malloc(sizeof(name));
obj->a=temp;
printf("%d %u %d",temp,&temp,obj->a);
return 0;
}
答案 3 :(得分:0)
正确地说,你的结构应该这样声明:
struct name {
int a;
};
void foo() {
struct name n; // allocate space for 'struct name' and call it n
struct name *obj; // a pointer to a 'struct name'
int temp = 3;
obj = &n; // make obj point to n
n.a = temp; // direct assignment to a
obj->a = temp; // assignment to a via pointer dereference
// a is now 3 in any case
}
答案 4 :(得分:0)
这是您的代码的另一个带注释的版本。在Eclipse / Microsoft C编译器上执行此操作,这不是C ++代码。
#include <stdio.h>
main()
{
// define a structure as a data type
typedef struct
{
int *a;
} name;
// allocate storage for an integer and set it to 3
int temp = 3;
// allocate storage for the name structure
name obj;
// set the value of a in name to point to an integer
obj.a = &temp;
// dereference the integer pointer in the name structure
printf("%d\n", *obj.a);
}
答案 5 :(得分:-1)
obj->a = temp;
试一试!