我创建了一个结构,我想给它一个值而不创建一个对象(结构整数 a)。在字符串中我可以使用strcpy
它,但我可以为整数值做什么。
#include<stdio.h>
struct integer
{
int x[5];
};
main()
{
struct integer *pointer;
pointer->x[0]=5;
printf("pointer->x[0]");
}
我创建了一个结构,我想给它一个值而不创建一个对象(结构整数 a)。在字符串中我可以使用strcpy
它,但我可以为整数值做什么。
#include<stdio.h>
struct integer
{
int x[5];
};
main()
{
struct integer *pointer;
pointer->x[0]=5;
printf("pointer->x[0]");
}
问题是你没有让指针指向任何对象,所以要么使用malloc
它,要么像这样使用它:
int main(){
struct integer obj;
struct integer *pointer = &obj;
pointer->x[0]=5;
printf("%d\n",pointer->x[0]);
}
作为pointer
一个指针,您需要在使用它之前分配内存。
做
pointer = malloc(sizeof(*pointer));
pointer->x[0]=5;
首先使指针指向一些分配的空间。
#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;
}
当您生活在 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
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
}
您不能在不创建对象的情况下分配值,下面的代码可能会导致分段错误,因为它可能正在访问未分配给程序的内存。
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]");
}
问题是你的指针没有指向任何对象!!!!
您有 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]);