【DAY11】深挖 C 语言:数字运算技巧 + 结构体 6 大核心用法(附代码)
本文介绍了C语言中数字拆分拼接技巧和结构体相关知识点。主要内容包括:1)通过取模和除法运算实现数字拆分与拼接;2)main函数参数传递的四种形式;3)结构体类型定义、变量定义与初始化方法;4)结构体成员访问方式(.和->操作符);5)结构体内存对齐原则;6)结构体作为函数参数的应用。文中通过示例代码演示了结构体嵌套使用、指针访问成员变量等典型用法,并详细说明了结构体内存对齐的计算方法。
技巧学习
1.拆分和拼接一个数的方法
int a = 12345;
// //int a = 3; int n = 5;
12345 %10 = 5 0 * 10 + a = 3;
12345 / 10 = 1234 a * 10 + a = aa;
1234 % 10 = 4 aa *10 + a = aaa;
....
一、主函数传参
int main(void); void main(void);
int main(int argc , const char *argv[ ] );
int main(int argc , const char **argv);
argc :传入参数个数;
argv :传入所有参数字符串首地址的指针数组
#include<stdio.h>
int main(int argc, const char **argv)
{
int i = 0;
printf("argc = %d\n", argc);
for(i = 0; argv[i] != NULL; i++)
{
printf("argv[%d] = %s\n", i ,argv[i]);
}
return 0;
}

二、构造数据类型
*结构体
<一>结构体类型定义
struct 结构体名 struct student
{ {
数据类型1 成员变量; char name;
数据类型2 成员变量; char sex;
...... int age;
}; };
<二>结构体变量的定义
数据类型 变量名;
struct student a ;
<三>结构体变量的初始化
使用在<一>中定义的结构体 定义变量
1.全部初始化
struct student a = {" Rose " , ' w ' , 20 , 90};
2.局部初始化
struct student a = {
.name = {"Rose"},
.score = 100,
};
struct datetime dt = {
.d = {
.year = 2026,
},
.t = {
.hour = 14,
.min = 20,
},
};
<四>结构体成员变量的访问
- 结构体变量类型 访问成员变量 用 . 访问
- 指针类型 的 结构体 访问成员变量用 ->
//结构体的类型定义
// 变量定义
// 变量初始化
// 变量访问
#include<stdio.h>
struct date
{
int year;
int mon;
int day;
};
struct book
{
char bookname[32];
char writer[32];
struct date d; // 要把 构造的日期放到 book 的前面
};
struct time
{
int hour;
int min;
int sec;
};
struct datetime
{
struct date d;
struct time t;
};
int main(void)
{
struct book n = {
.bookname = {"Harry Poter"},
.writer = {"J.K.Rowling"},
};
struct datetime dt = {
.d = {
.year =1997,
.mon = 1 ,
.day = 22,
}, //注意这里是逗号
.t = {
.hour = 14,
.min = 48,
},
};
struct book *p = NULL;
struct datetime *pdt = NULL;
p = &n; //取地址
printf("bookname:%s\n", p->bookname);
printf("writer:%s\n", p->writer);
pdt = &dt;
printf("%04d-%02d-%02d\n %02d:%02d:%02d\n", pdt->d.year, pdt->d.mon, pdt->d.day,
pdt->t.hour, pdt->t.min, pdt->t.sec);
//注意 . -> 的使用方法
return 0;
}
<五>结构体的存储
- 内存对齐
- 结构体成员变量只能存放在内存地址为自身基本类型长度整数倍的内存单元
- 结构体的大小必须为最大基本数据类型长度的整数倍
例题:求以下结构体所占字节数
struct s
{
char a; // 1byte
short b; // +1byte 再存 2byte , 4byte
char c; // 5byte
int d ; // +3byte(补到4的整数倍) 再存 4 byte, 一共12byte
};
<六>结构体作为函数参数
#include<stdio.h>
struct student
{
char name[32];
char sex[32];
int age;
int scor;
};
void getstudent(struct student *px)
{
scanf("%s", px->name); //%s 不用加&
scanf("%s", px->sex);
scanf("%d",&px->age);
scanf("%d",&px->scor);
return ;
}
void printfsutudent(struct student *px)
{
printf("name:%s\n sex: %s\n age: %d\n scor: %d\n", px->name, px->sex, px->age, px->scor);
//指针类型的结构体访问成员变量用 ->
return ;
}
int main(void)
{
struct student x = {0};
getstudent(&x);
printfsutudent(&x);
return 0;
}
<七>结构体数组
1、类型定义
数据类型 数组名 [元素个数];
struct student s [3];
2、初始化
struct student s[3] = {
{"zhangsan", 'm', 19, 100},
{"lisi", 'f', 18, 90},
{"wanger", 'm', 17, 85},
};
更多推荐



所有评论(0)