如何通过指针给结构内部的数组赋予整数值

时间:2013-08-11 06:42:35

标签: c

我创建了一个结构,我希望在不创建对象的情况下给它一个值(结构整数a)。 在字符串中,我可以使用strcpy,但我可以为整数值做什么。

#include<stdio.h>
struct integer
{
   int x[5];
};

main()
{
  struct integer *pointer;
  pointer->x[0]=5;
  printf("pointer->x[0]");
}

7 个答案:

答案 0 :(得分:1)

问题是你没有让poiter指向任何对象,所以使用malloc或者像这样使用它:

int main(){
    struct integer obj;
    struct integer *pointer = &obj;
    pointer->x[0]=5;
    printf("%d\n",pointer->x[0]);
}

答案 1 :(得分:1)

由于pointer是一个指针,因此在使用之前需要分配内存。

pointer = malloc(sizeof(*pointer));
pointer->x[0]=5;

答案 2 :(得分:0)

首先使指针指向一些已分配的空间。

#include<stdio.h>
struct integer{
int x[5];
};

int main(){
struct integer *pointer = malloc(1*sizeof(struct integer)); //Allocated memory 

pointer->x[0]=5; //Initialize the element(s) of x

printf("%d",pointer->x[0]); //Use proper format specifier for printf 

free(pointer); //Always free memory after use.

return 0;

}

答案 3 :(得分:0)

当你生活在C世界时,你需要使用malloc / free。

#include<stdio.h>
struct integer{
int x[5];
};
main(){
struct integer *pointer;
pointer = malloc(sizeof(struct integer));
pointer->x[0]=5;
printf("pointer->x[0] = %d", pointer->x[0]);
free(pointer);

}

应该加入缩进但不能打开我的IDE

答案 4 :(得分:0)

如果您事先没有分配相应的内存,

strcpy将不适合您。

还有与strcpy具有相似属性的通用函数 - memcpy它基本上将一个指针指向的内存复制到另一个指针。

#include<stdio.h>
#include <stdlib.h>
struct integer {
   int x[5];
};

main(){
   struct integer *pointer, source;
   source.x[0] = 5;
   pointer = malloc (sizeof(struct integer));
   memcpy(pointer, &source, sizeof(struct integer));
   printf("%d", pointer->x[0]); //will be 5
}

答案 5 :(得分:-1)

如果不创建对象,则无法分配值,下面的代码可能会导致分段错误,因为它可能正在访问未分配给程序的内存。

main(){
struct integer *pointer; //<-- 'pointer' is just some garbage address
pointer->x[0]=5; //<-- as pointer may contain memory which may not be accessible to current process which causes "Segmentation Fault"
printf("pointer->x[0]");
}

@Ed治愈:谢谢你纠正我

使用[lang:C ++] struct integer *pointer=new integer(); [lang:C] pointer = (struct integer*) malloc(sizeof(struct integer));分配内存或不使用指针,如下所示

main(){
struct integer *pointer = (struct integer*)malloc(sizeof(struct integer)); //<-- 'pointer' is now pointing to memory allocated for struct 'integer'
pointer->x[0]=5;
printf("pointer->x[0]");
}

答案 6 :(得分:-1)

问题是你的指针没有指向任何对象!!!!

您有3个选项:

像这样使用malloc

struct integer *pointer = (struct integer*)malloc(1*sizeof(struct integer)); 

OR

main()
{
struct integer nonPointer;
nonPointer.x[0]=5;
printf("pointer->x[0] %d",nonPointer.x[0]);
}

OR

 main()
 {
    struct integer integerObj;
    struct integer *pointer=&integerObj;
    pointer->x[0]=5;
    printf("pointer->x[0] %d",pointer->x[0]);
 }

现在关于副本,如果你需要复制对象(比如strcpy和字符串),你可以使用memcpy

void *memcpy(void *str1, const void *str2, size_t n)

在你的情况下你可以像这样使用它:

struct integer *target, *source;
target=(struct integer*)malloc(1*sizeof(struct integer));
source=(struct integer*)malloc(1*sizeof(struct integer));
source->x[0]=5;

memcpy(target, source, sizeof(struct integer));
printf("target->x[0] %d",target->x[0]);