结构体变量的三种赋值方式以及三种常见错误的赋值方式

举报
holo.yh 发表于 2021/07/07 23:04:54 2021/07/07
【摘要】 一、正确的三种赋值方式 1.定义变量的同时初始化赋值 2.通过“=”赋值 3.通过scanf()函数赋值 二、常见的三种错误赋值方式 1.不能在结构体内部给成员赋初值。 2.定义结构体变量的同时初始化时,不能跳过去前面的成员为后面的成员赋值。 3.给字符串赋值时,不能使用“ = ”。

一、正确的三种赋值方式

#include<stdio.h>
#include<string.h>

struct student
{
	int age;		//年龄 
	char name[20];	//姓名 
	int id; 		//学号
	char phoneNum[20]; //手机号 
//	int test = 16; 	//报错 ,不能在结构体内部赋值 
//	id = 1;	    	//报错 ,不能在结构体内部赋值 
};
	
int main()
{
	printf("年龄\t姓名\t学号\t手机号");
	printf("\n=================================\n");
	
	//一、定义变量的同时初始化为stu1赋值
	struct student stu1 = {18 ,  "张三", 17 , "17638888888"}; //类似于数组,必须严格按照定义结构体类型时的成员顺序填写
//	struct student stu4 = {18 , "张三" , , "17638888888"};  // 报错 ,不能不按顺序写,也不能跳过。 

	printf("%d\t%s\t%d\t%s\n",stu1.age,stu1.name,stu1.id,stu1.phoneNum);
	
	//二、利用赋值语句逐条为stu2赋值
	struct student stu2;
	
	stu2.age = 19;
//	stu2.name = "张三"; //报错,字符串不能通过“= ”赋值 
	strcpy(stu2.name,"李四");
	stu2.id = 18;
	strcpy(stu2.phoneNum,"19334533534");
	printf("%d\t%s\t%d\t%s\n",stu2.age,stu2.name,stu2.id,stu2.phoneNum);
	
	//三、通过scanf()函数为stu3赋值
	struct student stu3;
	scanf("%d%s%d%s",&stu3.age,stu3.name,&stu3.id,stu3.phoneNum);
	printf("%d\t%s\t%d\t%s\n",stu3.age,stu3.name,stu3.id,stu3.phoneNum);
	
	return 0;
} 

二、常见的三种错误赋值方式

1.不能在结构体内部给成员赋初值。如下面的用法会报错

struct student
{
	int age = 17;	//报错,不能在结构体内部定义成员时赋初值。
	char name[20] = "张三";	 
	int id = "10"; 		
	char phoneNum[20] = "17637578839";
};

2.定义结构体变量的同时初始化时,不能跳过去前面的成员为后面的成员赋值。如下面的用法会报错

struct student stu4 = {18 , "张三" , , "17638888888"};  // 报错 ,不能不按顺序写,也不能跳过。 

3.给字符串赋值时,不能使用“ = ”。如下面的用法会报错

stu2.name = "张三";   //报错,字符串不能通过“= ”赋值 
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。