结构体初始化的几种方法(结构体变量的初始化)

:暂无数据 2026-04-13 21:00:02 0
想高效掌握结构体初始化的几种方法的核心吗?本文将为你聚焦结构体变量的初始化这一关键环节,帮你节省大量摸索时间。

本文目录

结构体变量的初始化

  结构体变量简称为结构变量,它由结构类型定义,有三种定义方法。下面以定义结构类型 book 和结构变量mybook 、 storybook 为例说明之。
  1. 先定义结构类型,再定义结构变量。
  struct book /* 定义结构体类型 */
  {
  char bookname;
  float price;
  char publisher;
  char author;
  } ;
  struct book mybook, storybook;
  用这种方法定义结构变量,是最常用的方法,但须注意不能省略关键字“ struct ”。还可以在定义结构变量的同时给它的成员赋初值。如:
  struct book /* 定义结构体类型 */
  {
  char bookname;
  float price;
  char publisher;
  char author;
  } ;
  struct book mybook = { “maths”, 24.7, “ 电子社 ”, “zhao” }, storybook;
  则, mybook 变量的 price = 24.7 。
  2. 定义结构类型的同时定义结构变量。
  struct book /* 定义结构体类型 */
  {
  char bookname;
  float price;
  char publisher;
  char author;
  } struct book mybook, storybook;
  3. 不定义结构类型,直接定义结构变量。
  struct /* 不定义结构类型名 */
  {
  char bookname;
  float price;
  char publisher;
  char author;
  } struct book mybook, storybook;
  需要说明的是,当某结构类型的成员又是另外一个结构类型时,称嵌套定义,其定义方法如下:
  struct brith_date
  {
  int month ;
  int day ;
  int year ;
  } ;
  struct
  {
  char name ;
  char address;
  char tel;
  int age;
  struct data birthday;
  char ***;
  } student_01 , employee ;
  此例直接定义了 student_01 和 employee 两个变量,但是没有定义此结构体的名字,因此不能再定义与student_01 和 employee 同类的其它结构变量了!如下行定义是错误的:
  truct boy, girl;

如何对结构体变量初始化

有3种方法可以初始化结构体变量,我分别用std0,std1和std2来剧烈,方法如下,这个程序已经在vc6里面通过调试了
#include《stdio.h》
#include《string.h》
struct Student
{
int number;
char name;
}std0={100,"name0"};
void main()
{
struct Student std1={101,"name1"};
struct Student std2;
std2.number=102;
strcpy(std2.name,"name2");
printf("std0:%d\t%s\n",std0.number,std0.name);
printf("std1:%d\t%s\n",std1.number,std1.name);
printf("std2:%d\t%s\n",std2.number,std2.name);
}

C++ 结构体如何初始化

有以下几种方法:
1 使用构造函数。
在C++中,struct可以当做类(class)来使用,同样支持成员函数,构造函数,析构函数。所以可以写对应的构造函数,实现自由初始化。
2 定义时,按照成员变量位置,写初始化列表。
如struct test中有成员int a, char b, 和float c,那么初始化一个变量可以写作
struct test t1 = {100, ’A’, 1.23};
当初始化列表不全时,省略部分自动初始化为0,即
struct test t1 = {100, ’A’};

struct test t1 = {100, ’A’, 0};
等效。
3 部分编译器支持显示成员变量初始化,如g++。

struct test t1 = {.b= ’A’, .a=100};
没有涉及到的变量初始化为0.该种方式不是所有编译器都支持,当代码有跨平台需求时需谨慎使用。

如何用函数初始化结构体

一、若类和结构体所有数据成员均为public型,可采取如下带花括号形式进行初始化。
注意:
① 不论值的个数多少,都必须使用花括号定界
② 未指定值的数据成员编译器会自动初始化为默认值
③ 这种初始化对象方式,要求所有数据成员必须为public型
④ 这种初始化对象方式,要求类中不能编写任何构造函数
struct S { //class S 效果一样
int x;
unsigned short y;
};
S testS1={100,123};
S testS2={200};//未指定值的数据成员初始化为默认值,这里os2.y=0;
S TestS={ {100,10},
{200,20},
{300} };//未指定值的初始化为默认值,os.y。
《windows核心编程》中我们会遇到:STARTUPINFO si = { sizeof(si) } ,就是对si结构体的初始化。
二、若数据成员有private或protected型,或是提供了构造函数,必须使用构造函数来进行初始化。
struct S { //class S可自行试验,结果相同
private:
int x;
public:
double y;
S(void){}
S(int idemo,double ddemo) {x=idemo;y=ddemo;}
void show(void) {cout《《x《《’’\t’’《《y《《endl;}
};
S os1;//将调用默认构造函数(无参构造函数)
S os2(1000,2.345);
S os3=S(2000,4.567);
S os={S(10,1.234),S(20,2.234)};//未初始化的将调用默认构造函数。如此时没有默认构造函数会出错。
重要提示:
①在S os3=S(2000,4.567);语句中,因是声明并初始化os3对象,所以将调用S(int,double)构造函数对os3进行初始化。
②S os3(2000,4.567); 等价于 S os3=S(2000,4.567);
③但如果os3已经存在了,S os3(100,1.234);os3=S(2000,4.567),则表示用一个临时对象赋值给os3,将调用operator=,然后系统再释放这个临时产生的对象。系统默认的=运算是将源对象的数据成员的值复制到目标对象中的数据成员中。

怎么给结构体变量的成员是字符数组初始化

结构体初始化可以在定义的时候,显式初始化,其格式为:

struct type var ={初始化参数列表}

其中初始化参数列表,按照结构体定义的顺序,依次填入对应的值,以逗号隔开,对于空白的部分,系统自动赋值为0。


struct test

{

    int a;

    char c;

    float f;

};

定义并初始化可以写作

struct test var = {1, ’c’, 1.23};

对于有字符数组成员的,其初始化格式与字符数组变量初始化类似,可以写作如下两种方式:

struct test 

{

    char arr;

};

  1. struct test var = {"test"};

    以字符串方式初始化。

  2. struct test var = {{’a’,’b’,’c’}};

    以数组形式初始化。

c语言如何对结构体某一成员初始化

结构体与类一样可以定义一个构造函数。
如下:
struct s{
s(){
a=0;
}
int a;
};
每次声明一个结构体变量时都会调用结构体的构造函数,在构造函数里面添加初始化语句就可以了

读完本文,你对结构体初始化的几种方法结构体变量的初始化之间的关系,是否有了新的认识?
本文编辑:admin

更多文章:


ps教程实例图文教程(PS怎么图片添加逼真彩虹PS添加彩虹图文教程)

ps教程实例图文教程(PS怎么图片添加逼真彩虹PS添加彩虹图文教程)

各位朋友,关于ps教程实例图文教程的讨论一直很多,今天咱们不聊复杂的,就聚焦于PS怎么图片添加逼真彩虹PS添加彩虹图文教程,用最直白的方式把它讲清楚。

2026年4月13日 22:40

apprehensive(apprehensive的词根词缀是什么)

apprehensive(apprehensive的词根词缀是什么)

当大家谈论apprehensive时,总免不了提及apprehensive的词根词缀是什么。它们之间究竟有何玄机?读完本文你便了然于胸。

2026年4月13日 22:20

arrayslice是什么意思(javascript中sclice(iStart,[iEnd])是什么意思)

arrayslice是什么意思(javascript中sclice(iStart,[iEnd])是什么意思)

当大家谈论arrayslice是什么意思时,总免不了提及javascript中sclice(iStart,[iEnd])是什么意思。它们之间究竟有何玄机?读完本文你便了然于胸。

2026年4月13日 22:00

什么叫嵌入式系统(嵌入式系统定义)

什么叫嵌入式系统(嵌入式系统定义)

面对什么叫嵌入式系统这个议题,很多人在嵌入式系统定义这里栽了跟头。今天,我们就来聊聊如何避免这个坑,轻松上手。

2026年4月13日 21:40

和积分商城网站(中国联通积分商城登录)

和积分商城网站(中国联通积分商城登录)

本篇内容旨在成为您理解和积分商城网站的实用手册,其中中国联通积分商城登录将是我们要重点打磨的章节。

2026年4月13日 21:20

结构体初始化的几种方法(结构体变量的初始化)

结构体初始化的几种方法(结构体变量的初始化)

想高效掌握结构体初始化的几种方法的核心吗?本文将为你聚焦结构体变量的初始化这一关键环节,帮你节省大量摸索时间。

2026年4月13日 21:00

正则表达式提取中文(怎么用正则提取前59个汉字)

正则表达式提取中文(怎么用正则提取前59个汉字)

我们注意到,那些在正则表达式提取中文上表现突出的人,往往都对怎么用正则提取前59个汉字有独到的见解。这并非巧合。

2026年4月13日 20:40

spitting怎么读(spitting怎么读)

spitting怎么读(spitting怎么读)

正如一位名家所言:“弄懂spitting怎么读,是通往spitting怎么读殿堂的捷径。” 今天,我们就来走一走这条捷径。

2026年4月13日 20:20

源码论坛模板(独立论坛如何建 怎么购买)

源码论坛模板(独立论坛如何建 怎么购买)

面对源码论坛模板这个议题,很多人在独立论坛如何建 怎么购买这里栽了跟头。今天,我们就来聊聊如何避免这个坑,轻松上手。

2026年4月13日 20:00

transition四个属性顺序(css3 transition里的属性有先后顺序吗)

transition四个属性顺序(css3 transition里的属性有先后顺序吗)

下面,我们将通过transition四个属性顺序的概述、css3 transition里的属性有先后顺序吗的详解以及总结展望三个部分,为您系统梳理这一主题。

2026年4月13日 19:40

最近更新

apprehensive(apprehensive的词根词缀是什么)
2026-04-13 22:20:02 浏览:0
arrayslice是什么意思(javascript中sclice(iStart,[iEnd])是什么意思)
2026-04-13 22:00:01 浏览:0
spitting怎么读(spitting怎么读)
2026-04-13 20:20:01 浏览:0
transition四个属性顺序(css3 transition里的属性有先后顺序吗)
2026-04-13 19:40:03 浏览:0
热门文章

繁体字转换器(繁体字转化)
2026-04-04 18:00:01 浏览:0
androidbc(bc8-android是什么手机型号)
2026-04-05 07:20:02 浏览:0
标签列表