将int值赋给指针

时间:2013-08-08 05:34:09

标签: c++ c struct

我需要为指针分配一个int值,我该怎么做?

以下是我想要的一个小例子。

struct {
  int a;
} name;
int temp = 3;
struct name *obj = NULL;

现在,我需要将此值'3'分配给struct的'a'。

6 个答案:

答案 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;

另请注意,您已使用CC++标记了问题 - 尤其是结构,您应该决定使用哪种语言 - 请参阅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)

编辑(感谢Andreas):

正确地说,你的结构应该这样声明:

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;

试一试!