我创建了一个结构,我希望在不创建对象的情况下给它一个值(结构整数a)。
在字符串中,我可以使用strcpy
,但我可以为整数值做什么。
#include<stdio.h>
struct integer
{
int x[5];
};
main()
{
struct integer *pointer;
pointer->x[0]=5;
printf("pointer->x[0]");
}
答案 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]);