2 whoami wang whoami_wang 于 2014.12.17 17:31 提问

结构体对象使用malloc初始化时候有办法直接对结构体变量赋值吗

结构体对象使用malloc初始化时候有办法直接对结构体变量赋值吗?

5个回答

lx624909677
lx624909677   Ds   Rxr 2014.12.17 19:27
已采纳

如果是C++的结构体,可以在构造函数中赋值,比如
struct data
{
int a;
data()
{
a = 1;
}
};

lx624909677
lx624909677 不好意思,这个是new的时候才能好用的方法。malloc的话必须要手动初始化,建议使用new
3 年多之前 回复
u011767611
u011767611   2014.12.17 17:50

你动态分配了结构体变量无非是,后面的工作需要对它进行赋值,以及各种运算。
那么,你所说malloc初始化直接赋值。是指什么样的情况的,难道是像c++中的
(构造函数)。事实上c++的构造函数在使用前你也需要用

className mycClass=new className

使用new分配内存的

#include <iostream>
using namespace std;
class className
{
    public:
    int x;
    int y;
    private:
    int a;
    int b;
};
int main(void)
{
    className * myClass=new className;
    myClass->x=1;
    myClass->y=2;
    cout<<myClass->x<<endl;
    cout<<myClass->y<<endl;
    return 0;
}

而在c里面你使用malloc分配了内存空间,你后面无非是通过指针去访问它!
怎么,感觉你像是在问,malloc分配内存后,能否自动初始化(而不是初始化malloc,后赋值)
希望能帮到你!

bdmh
bdmh   Ds   Rxr 2014.12.17 17:34

没让你这么干,就老实实的,该怎么赋值就怎么赋值

PeeNut
PeeNut   2014.12.17 18:36

我们常见的是直接把结构全部初始化为空,用memset函数来实现,你是要初始化成一些内容的话,有个用法不知道是不是你想要的:
struct ST_Name
{
int iCnt;
char szTemp[128];
...
}
stTest=
{
123,
"asdfgh",
...
}

panziwen86
panziwen86   2014.12.18 14:43

你用calloc(1,size)吧,可以初始化为0

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
【c语言】用malloc函数给结构体赋值的使用方法,free清空
我们知道,结构体使用之前必须的赋初值,例如: struct  A { char *na; }*p; 对这个结构体而言,如不对char *na和*p赋初值   ,这个程序就通不过,*p是一个结构体指针,所以我们要找到它要指的地方就必须知道*na的地址,于是仅有na有初值才知道*p的指向,即他保存的地址。同理要找到p在哪里,就得对p赋初值。
有关c语言结构体能否直接赋值的问题
http://codewenda.com/c%E8%AF%AD%E8%A8%80%E7%BB%93%E6%9E%84%E4%BD%93%E7%9B%B4%E6%8E%A5%E8%B5%8B%E5%80%BC/,这个博客给出了详细的解答,有问题的可以去看看。 简单来说,就是没有指针的结构体可以直接赋值,有指针的,赋值的只是地址,没有重新开辟空间,需要一个个开辟空间赋值。
C++/C 千万别对结构体内部含有类使用memset赋值!!
因为一个crash,我琢磨了1天,无论如何修改,都不成功,无限次的怀疑都没怀疑这个memset!!最后怒了,把memset对结构体赋值,换成了{},我TM成功了!后来百度搜索了,有一文说 memset可能破坏类的析构函数!!!血的教训更多文章:http://blog.csdn.net/what951006?viewmode=list powered by:小乌龟在大乌龟背上
结构体变量在定义时赋值
http://bbs.chinaunix.net/thread-1264281-1-1.html 在看Wireless tools这个工具的源代码时,看到iwlib.c这个文件,发现了standard_ioctl_descr这个变量,它是iw_ioctl_description定义的数组, iw_ioctl_description是这样定义的: struct iw_ioctl_des
对于结构体,什么时候分配内存以及为什么选择用malloc函数来分配结构体变量的地址
我们都知道结构体的定义: struct Node{     int score;     int age;     char sex; }sqlist; 这样一组结构体定义。 那先说说C语言中定义和声明的区别吧:     首先:声明是指定一个变量的标识符号,比如int a;                           定义是对声明的实例化,一定会分配内存空间。sqli
结构体变量的初始化和赋值
下面是一段结构体变量初始化和赋值的小程序:#include <stdio.h> struct Student { int age; float score; char sex; }; int main(void) { //定义并赋值称之为初始化 struct Student st1 = {80, 66.0F, 'F'}; //定义声明结构体变量st2,
结构体定义和初始化
目标:结构体类型,结构体变量,结构体初始化。弄清这3个概念及其间的联系。   结构的定义 定义一个结构的一般形式为: struct 结构名 { 成员表列 } 成员表由若干个成员组成,每个成员都是该结构的一个组成部分。 对每个成员也必须作类型说明。 例如: s
(C/C++基础)结构体_初始化_赋值_定义_声明
首先介绍一下初始化、赋值、定义、声明这四个概念。 初始化:创建变量并给它赋初值。初始化和赋初值不同。初始化=带指定初始值的定义。一个程序中,一个变量只能初始化一次。如:int  i=0; 赋值:擦除对象的当前值并用新值替代,在一个程序中,一个变量可以多次赋值。 定义:用来为变量分配内存空间,还可以为变量指定初始值。在一个程序中,变量有且仅有一个定义。例:int  i;(单纯定义)  int
C++ 结构体可以直接赋值
一直记得C语言中,结构体是不可以直接赋值的,需要逐一成员赋值或者用memcpy函数。 但是在C++中可以(无需重载=运算符),需要区分以下3种情况: #include #include using  namespace std;  struct  A  {  char   a[10];  };   struct  B  { 
关于结构体成员的直接赋值
#include #include struct student { char id[11]; char name[20]; char score[3]; char email[30]; int age; }; int main() { student ming; ming.age = 16; //结构体成员为数组时进行单独赋值。 //第零种方法,字符串赋值。