【从饮水机到名人堂之c语言】日常学习总结
目录
前言
一、指针
1.内存
2.指针变量的大小
二、static关键字
三、常量和宏
四、typedef关键字
五、结构体
总结
前言
在自己的学习过程中的总结,方便日后的复习。
一、指针
1.内存
内存是我们电脑中重要的存储器,我们程序的运行都在我们的内存中,我们的内存被分为一份一份的小的内存单元,一个一个的小单元为一个字节即1byte,然后为了方便管理内存中的每个单元,我们给每块内存进行了编号,就叫做这块内存的指针或地址。
int * 是一种指针变量 他和其他变量类似
&为取地址符,可以通过&来获取变量的地址
*为解引用符 ,可以*加上某一变量的地址来获取该变量进行一系列操作
指针也可以应用到其他类型的变量
如char float
当变量类型为char时,他的指针变量将定义为 char* ,char为指针所对应变量的类型,而后边的*代表这是一个指针。
#include <stdio.h>
int main()
{char ch = 'w';char* pc = &ch;*pc = 'q';printf("%c\n", ch);return 0;
}
2.指针变量的大小
指针变量的大小取决于地址的大小,当我们在X86平台下时,我们的虚拟的地址空间为32为,即有32位的2进制数字,我们的一个字节(byte)为八个比特(bit),一个比特(bit)存储一个2进制数字0或1,故32位2进制数字将存储需要4个字节的大小。
而在我们的X64平台下,我们的虚拟地址空间为64位,同理可得,我们存储这个地址需要8个字节的空间。
#include <stdio.h>
//指针变量的大小取决于地址的大小
//32位平台下地址是32个bit位(即4个字节)
//64位平台下地址是64个bit位(即8个字节)
int main()
{printf("%d\n", sizeof(char *));printf("%d\n", sizeof(short *));printf("%d\n", sizeof(int *));printf("%d\n", sizeof(double *));return 0;
}
二、static关键字
1.修饰局部变量时,该局部变量的生命周期变长,不会随着作用域结束而消失。
如:static int a = 0;
2.修饰全局变量时,该全局变量成为该模块的私有内容,在编译结束后,将由外部链接变为内部链接,在同一个工程中,其他文件并不能用extern关键词直接引用该全局变量。
如:static char = ‘a’;
3.修饰函数时,与全局变量相似,成为该文件的专属内容,有外部链接改为内部链接,也不能用extern声明。
如:static int Add(x,y);
三、常量和宏
1.#define MAX 100
这是对于常量的定义,我们要注意定义后不加分号
2.#define 定义宏
//define 定义宏#define ADD(x, y) ((x)+(y))#include <stdio.h>int main (){int sum = ADD ( 2 , 3 );printf ( "sum = %d\n" , sum );sum = 10 * ADD ( 2 , 3 );printf ( "sum = %d\n" , sum );return 0 ;}定义宏和函数有些类似, #define ADD(x, y) ((x)+(y)),在此句中,我们可以在((x)+(y))将变量用括号括起来,避免产生歧义。
四、typedef关键字
typedef unsigned int uint;
typedef顾名思义就是类型重定义,就是我们对数据类型名新起一个名字,将复杂的名字化简。
//将unsigned int 重命名为uint_32, 所以uint_32也是一个类型名
typedef unsigned int uint_32;
int main()
{//观察num1和num2,这两个变量的类型是一样的unsigned int num1 = 0;uint_32 num2 = 0;return 0;
}
五、结构体
当我们在使用数据时,会考虑到他们的数据类型,如:int float double char short long long long ,这些都是我们的内置数据类型,但是我们在生活中不可能只用到这些数据类型,我们在定义一个学生类型时,应该考虑到学生的姓名学号性别成绩等内容,这时,我们可以定义一个结构体变量,将这些内容进行定义。
struct Stu
{char name[20];//名字int age; //年龄char sex[5]; //性别char id[15]; //学号
};
//打印结构体信息
struct Stu s = {"张三", 20, "男", "20180101"};
//.为结构成员访问操作符
printf("name = %s age = %d sex = %s id = %s\n", s.name, s.age, s.sex, s.id);
//->操作符
struct Stu *ps = &s;
printf("name = %s age = %d sex = %s id = %s\n", ps->name, ps->age, ps->sex, ps-
>id);
在这段代码中,使用 struct关键字来对结构体进行操作,在初始化结构体内容时,切记对char类型数组输入时不加&符号,而需要输出结构体内容时,需要用到“.”和“->”结构体成员操作符,“.”操作符用于直接,如s1.age,而“->”用于 使用指针操作时,如ps->age。
总结
这就是今天的学习内容,常总结多学习。
【从饮水机到名人堂之c语言】日常学习总结相关推荐
- 【从饮水机到名人堂之c语言】操作符详解(1)
目录 前言: 一.操作符的分类 二.详解操作符 1.算术操作符 2.移位操作符 1.原码.反码.补码 2.左移位操作符 3.右移位操作符 三.位操作符 1.按位与& 2.按位或 | 3.异或^ ...
- 【从饮水机到名人堂之c语言】详解rand()函数(详解随机数生成方法)
目录 前言 一.rand()函数 二.srand()函数 三.时间戳 四.time()函数 五.注意 六.猜大小游戏源码 总结 前言 在我们的日常写程序中,必然会用到我们的rand函数生成我们的随机数 ...
- 会思考的饮水机:基于时间序列分析节能30%+
本文来自AbleCloud研发团队的实践,通过对历史数据的建模,学习出特定的规律,并应用此规律预测某台饮水机在未来某个时间点是应该打开电源烧水还是关闭电源以节能. 概要 瑞典爱立信公司的最新研究报告显 ...
- 54、基于51单片机饮水机温度水位控制无线蓝牙APP控制报警系统设计(程序+原理图+PCB源文件+Proteus仿真+参考论文+开题报告+元器件清单等)
方案的选择 方案一:采用51单片机作为控制核心,配合无线蓝牙模块.水温加热模块继电器开关.基于Dallas单线数字式的DS18B20温度传感器模块.蜂鸣器报警模块.按键模块.LCD1602液晶显示器模 ...
- 新手入门:学RAID从饮水机开始(图)
对于网管来讲,如何有效保证服务器上数据的安全呢?用多个硬盘建立RAID恐怕是最普遍的手段了.今天就由笔者通过一问一答的方式为各位IT168的读者介绍RAID相关的知识. 问题1:什么是RAID?它是由 ...
- “饮水机”形象比喻 教你什么是RAID
问题1:什么是RAID?它是由什么组成的? RAID的中文名字为磁盘冗余阵列,顾名思义他是由磁盘组成阵列而成的.因此RAID需要至少两块硬盘组成.RAID的基本想法就是把多个便宜的小磁盘组合到一起,成 ...
- “饮水机”形象比喻 教你什么是RAID[转载]
"饮水机"形象比喻 教你什么是RAID 这篇文章写得非常生动具体学习理解Raid是非常有帮助的.现转载过来学习一下! 问题1:什么是RAID?它是由什么组成的? RAID的中文名字 ...
- 2022-2028年中国饮水机市场投资分析及前景预测报告
[报告类型]产业研究 [报告价格]¥4500起 [出版时间]即时更新(交付时间约3个工作日) [发布机构]智研瞻产业研究院 [报告格式]PDF版 本报告介绍了中国饮水机行业市场行业相关概述.中国饮水机 ...
- 家用笔记本电脑什么牌子好_家用直饮水机什么牌子好 家用直饮水机品牌排名...
阅读本文前,请您先点击上面的"蓝色字体",再点击"关注",这样您就可以继续免费收到文章了.每天都有分享,完全是免费订阅,请放心关注. 注:本文转载自网络,不代表 ...
最新文章
- 前端解决跨域问题的8种方案(最新最全)
- iOS 不同机型屏幕适配
- Android 自定义圆形图片
- golang中的指针
- Activiti工作流之个人任务分配模式
- Java里的接口的interface 简单介绍.
- java域的控制修饰符可分为_Java中的类和方法的修饰符
- 推荐10个很棒的 CSS3 开发工具
- canvas绘制三角形
- mongodb地理空间索引原理阅读摘要
- C# 数据的加密解密
- 细说ReactiveCocoa的冷信号与热信号(三):怎么处理冷信号与热信号
- 漫步数理统计十七——条件分布与期望
- 200+页综述!阐述大规模预训练模型机遇与风险
- 大家有什么n刷的小说,可以推荐一下吗?
- JDBC使用总结:增删改查、调用存储过程、执行存储函数、存储过程与存储函数区别分析
- 2016年不容错过的十五大智能家居产品
- canvas瓦片图加载
- hashmap 线程不安全
- unittest框架中使用parameterized模块参数化