char函数

结构体struct 与 联合union

馋奶兔 提交于 2020-02-10 18:55:03
1.C语言中的结构体 1.1 定义 结构体 是由一系列相同或不同类型的变量组成的集合。 struct 结构体名{ //struct为关键字,“结构体名”为用户定义的 类型标识 。 数据类型1 成员名1; //{ }中是组成该结构体的成员,其中数据类型可以是C语言所允许的任何数据类型。 数据类型2 成员名2; ... 数据类型n 成员名n; }; 1.2 结构体的内存分配(方法一) 结构体在内存中分配一块连续的内存,但结构体内的变量并不一定是连续存放的,这涉及到内存对齐。 原则1 数据成员对齐规则:结构(struct或联合union)的数据成员,第一个数据成员放在offset为0的地方,以后每个数据成员存储的起始位置要从该成员大小的整数倍开始(比如int在32位机为4字节,则要从4的整数倍地址开始存储)。 原则2 结构体作为成员:如果一个结构里有某些结构体成员,则结构体成员要从其内部最大元素大小的整数倍地址开始存储。(struct a里存有struct b,b里有char,int,double等元素,那b应该从8的整数倍开始存储。) 原则3 收尾工作:结构体的总大小,也就是sizeof的结果,必须是其内部最大成员的整数倍,不足的要补齐。 例1. struct A{ struct B{ int a; char b; char b; int a; short c; short c; };

C++ typedef用法小结 (※不能不看※)

[亡魂溺海] 提交于 2020-02-10 11:19:32
C++ typedef用法小结 (※不能不看※) 第一、四个用途 用途一: 定义一种类型的别名,而不只是简单的宏替换。可以用作同时声明指针型的多个对象。比如: char* pa, pb; // 这多数不符合我们的意图,它只声明了一个指向字符变量的指针, // 和一个字符变量; 以下则可行: typedef char* PCHAR; // 一般用大写 PCHAR pa, pb; // 可行,同时声明了两个指向字符变量的指针 虽然: char *pa, *pb; 也可行,但相对来说没有用typedef的形式直观,尤其在需要大量指针的地方,typedef的方式更省事。 用途二: 用在旧的C的代码中(具体多旧没有查),帮助struct。以前的代码中,声明struct新对象时,必须要带上struct,即形式为: struct 结构名 对象名,如: struct tagPOINT1 { int x; int y; }; struct tagPOINT1 p1; 而在C++中,则可以直接写:结构名 对象名,即:tagPOINT1 p1; 估计某人觉得经常多写一个struct太麻烦了,于是就发明了: typedef struct tagPOINT { int x; int y; }POINT; POINT p1; // 这样就比原来的方式少写了一个struct,比较省事,尤其在大量使用的时候 或许

C 杂谈之 指针与数组 (一)

久未见 提交于 2020-02-10 04:55:41
/*--> */ /*--> */ 思维导图 介绍 前接上文 C 杂谈之 指针与数组 (一) ,接续往下谈指针和数组。 指针与数组 ——承接上文进行扩展 你知道X = Y,在编译运行过程中,是什么样吗? 字符指针与函数 1> 字符串是一个以'\0'结尾的字符数组。 看一个例子:printf接受的是一个指向字符数组第一个字符的指针。 这个例子与下面两个代码是一个道理. 2> 几个常用字符函数的编写。 1>>> strcat(s,t)函数,把t指向的字符复制到s指向的字符后面?——注意'\0' #include <stdio.h>#include <assert.h>/* strcat(ps, t): Copy the charactor pointed * by t append to the character pointed by s */void *strcat(char *ps, char *t){ char *addr = ps; assert((ps != NULL) && (t != NULL)); while(*ps){ /* The s point to the last character */ ps++; } while(*ps++ = *t++){ /* Copy t append to the s*/ } return addr;}int main(){

Windows进程/线程创建过程

白昼怎懂夜的黑 提交于 2020-02-10 02:07:52
参考链接: http://www.cnblogs.com/LittleHann/p/3458736.html 创建一个Windows进程,是由操作系统进行3各部分执行组成 1.客户的Windows库的Kernel32.dll 2.Windows执行 3.Windows子系统进程(Csrss.exe) 由于windows是多环境子系统的体系结构,因此,创建一个windows执行体进程对象(其他的子系统也可以使用),与创建一个windows进程的工作是分离的。 也就是说windows在创建进程的过程中有两大类的工作要做: 1.Windows系统加入的语义 2.执行体/内核层对象等的创建 Windows的CreateProcess创建一个进程时所涉及的主要阶段: 1.打开将要在该进程中执行的映像文件(*.exe) 2.创建Windows执行体的进程对象 3.创建初始化线程(栈、执行环境、Windows执行体线程对象) 4.通知Windows子系统新线程创建了,所以他可以为新进程和线程做好准备 5.开始执行初始线程 6.在新进程和线程中 完成地址空间的初始化(加载必要的Dll),并开始执行程序 2. 详细分析(CreateProcess) 阶段一:打开将要被执行的映像 如果指定的可执行文件是一个windows.exe类型的文件,那么,它可被直接使用。如果它不是一个windows.exe

C++实现1A2B小游戏(源代码)

邮差的信 提交于 2020-02-09 20:22:19
最近感冒了(〃>_<;〃),更新放慢为3天2更,可以吗 _| ̄|● ===》▇█▇▇▇█▇ >求关注,求点赞,求评论< Thanks♪(・ω・)ノ 1A2B游戏规则介绍:(不看不知道,一看吓一跳) 你和对手分别选定一个四位数,各位数字不要重复。 游戏开始后,由双方分别猜对方所选定的四位数,猜测的结果将会列在自己的猜测历史列表,并以A和B来表示结果。 A代表猜测的数字中,数字相同且位置也正确的个数。 B代表猜测的数字中,数字相同但位置不一样的个数。 举例来说,如果对方的数字为1234,且你猜的数字为5283,其中2被猜到且位置正确,3也被猜到但位置不对,所以结果会出现1A1B。 比赛由先完整猜出对方数字的人获得胜利(也就是先得到4A的玩家)。 # include <iostream> # include <stdlib.h> # include <time.h> # include <string.h> # include <stdbool.h> void InitializeGame ( void ) ; void GetInput ( char * input ) ; bool CheckAnswer ( char * input ) ; bool GiveTips ( char * input ) ; void GetRandom ( char * random ) ;

ESP8266开发之旅 应用篇⑦ 简易版本在线获取特定省份新型冠状病毒情况

只愿长相守 提交于 2020-02-09 18:52:49
授人以鱼不如授人以渔,目的不是为了教会你具体项目开发,而是学会学习的能力。希望大家分享给你周边需要的朋友或者同学,说不定大神成长之路有博哥的奠基石。。。 共同学习成长QQ群 622368884 ,不喜勿加,里面有一大群志同道合的探路人 快速导航 单片机菜鸟的博客快速索引(快速找到你要的) 如果觉得有用,麻烦点赞收藏,您的支持是博主创作的动力。 文章目录 1.前言 1.1 知识储备 2. 接口说明 3. 8266代码 4.总结 1.前言     这一篇,博主将教大家怎么去实现一个简易版本的获取省份疫情情况。    &ensp功能的图片,如下: 有条件的同学可以建立一个webserver html页面来显示或者用OLED显示 1.1 知识储备     本篇需要用到以下知识点: 运用到ArduinoJson V5库, github传送门 ,请读者自行下载该库放到Arduino安装目录(这里直接使用,博主后面计划会详细讲解该库,敬请期待); 运用到TCP Client,请参考 ESP8266开发之旅 网络篇⑦ TCP Server & TCP Client 运用到STA模式,请参考 ESP8266开发之旅 网络篇④ Station——ESP8266WiFiSTA库的使用 运用到一键配网功能,请参考 ESP8266开发之旅 网络篇⑧ SmartConfig——一键配网 2. 接口说明

第一次个人编程作业

半世苍凉 提交于 2020-02-09 17:31:50
这个作业属于哪个课程 软件工程 (福州大学至诚学院 - 计算机工程系) 这个作业要求在哪里 第一次个人编程作业 这个作业的目标 汉字编程 作业正文 如下 其他参考文献 无 github 代码行数: 151行 需求分析时间: 半小时 编码时间: 2小时 思路: 先是考虑输入值是否为“等于”,否则输出为NULL,再考虑输入值是否为“增加”或“减少”。全程都是用判断语句(if)来写的,还进行了函数的调用,将汉字与数字进行转换。 汉字->数字: int ZH(char a[10])//汉字->数字 { if(strcmp(a,b)==0) { k=10; } else if(strcmp(a,c)==0) { k=9; } else if(strcmp(a,d)==0) { k=8; } else if(strcmp(a,e)==0) { k=7; } else if(strcmp(a,f)==0) { k=6; } else if(strcmp(a,g)==0) { k=5; } else if(strcmp(a,h)==0) { k=4; } else if(strcmp(a,i)==0) { k=3; } else if(strcmp(a,j)==0) { k=2; } else if(strcmp(a,m)==0) { k=1; } else if(strcmp(a,n)==0)

python调用golang编写的动态链接库

末鹿安然 提交于 2020-02-09 07:42:18
楔子 我们都知道python的效率很低,但是好在可以和C语言无缝结合,C语言写好扩展模块之后再让python去调用简直不要太方便。但是使用C编写扩展模块也不是件容易的事情,于是笔者想到了go,go的效率虽然不如C,但是也没有逊色太多。而且go毕竟是一门高级语言,丰富的标准库、数据类型,编写扩展模块比C方便太多了。下面我们就来看看如何使用golang编写扩展模块交给python调用。 另外python和go之间进行交互,本质上是通过C语言来作为媒介的。在go中定义函数,参数和返回值需要是C中的类型,python调用时,参数和返回值也要指定为C中的类型。而这里只会介绍golang和C中的类型如何转换,至于python的类型和C的类型如何转换我只会直接拿来用,就不写注释介绍具体的用法了。因为python和C中的类型如何转换,比如如何在python中实现C中的数组、结构体等等,我在另一篇博客中 https://www.cnblogs.com/traditional/p/12243307.html 已经介绍的比较详细了,如果对python类型和C的类型之间的转化不是很清楚的小伙伴,可以先去看一看。 举个小栗子 package main import "C" //export age_incr_1 func age_incr_1(age int) int { return age + 1 }

leetcode-744-Find Smallest Letter Greater Than Target(改进的二分查找)

与世无争的帅哥 提交于 2020-02-09 07:34:35
题目描述: Given a list of sorted characters letters containing only lowercase letters, and given a target letter target , find the smallest element in the list that is larger than the given target. Letters also wrap around. For example, if the target is target = 'z' and letters = ['a', 'b'] , the answer is 'a' . Examples: Input: letters = ["c", "f", "j"] target = "a" Output: "c" Input: letters = ["c", "f", "j"] target = "c" Output: "f" Input: letters = ["c", "f", "j"] target = "d" Output: "f" Input: letters = ["c", "f", "j"] target = "g" Output: "j" Input: letters = ["c", "f", "j"] target = "j"

pr_debug、dev_dbg等动态调试一

谁都会走 提交于 2020-02-09 03:08:59
内核版本:Linux-3.14 作者:彭东林 邮箱:pengdonglin137@163.com pr_debug: #if defined(CONFIG_DYNAMIC_DEBUG) /* dynamic_pr_debug() uses pr_fmt() internally so we don't need it here */ #define pr_debug(fmt, ...) \ dynamic_pr_debug(fmt, ##__VA_ARGS__) #elif defined(DEBUG) #define pr_debug(fmt, ...) \ printk(KERN_DEBUG pr_fmt(fmt), ##__VA_ARGS__) #else #define pr_debug(fmt, ...) \ no_printk(KERN_DEBUG pr_fmt(fmt), ##__VA_ARGS__) #endif dev_dbg: #if defined(CONFIG_DYNAMIC_DEBUG) #define dev_dbg(dev, format, ...) \ do { \ dynamic_dev_dbg(dev, format, ##__VA_ARGS__); \ } while (0) #elif defined(DEBUG) #define dev