-2

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

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

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

7 回答 7

1

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

int main(){
    struct integer obj;
    struct integer *pointer = &obj;
    pointer->x[0]=5;
    printf("%d\n",pointer->x[0]);
}
于 2013-08-11T06:47:56.403 回答
1

作为pointer一个指针,您需要在使用它之前分配内存。

pointer = malloc(sizeof(*pointer));
pointer->x[0]=5;
于 2013-08-11T06:48:04.577 回答
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;

}
于 2013-08-11T06:47:13.227 回答
0

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

IE

#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

于 2013-08-11T06:49:14.360 回答
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
}
于 2013-08-11T06:52:47.277 回答
-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]");
}
于 2013-08-11T06:46:48.330 回答
-1

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

您有 3 个选项:

malloc 像这样使用

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

或者

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

或者

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

现在关于副本,如果您需要复制对象(例如strcpy使用 string ),您可以使用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]);
于 2013-08-11T06:49:38.080 回答