c语言

C语言指针的长度和类型

爱⌒轻易说出口 提交于 2020-02-29 06:27:00
本文地址: http://www.cnblogs.com/archimedes/p/point-length-type.html ,转载请注明源地址。 如果考虑应用程序的兼容性和可移植性,指针的长度就是一个问题,在大部分现代平台上,数据指针的长度通常是一样的,与指针类型无关,尽管C标准没有规定所有类型指针的长度相同,但是通常实际情况就是这样。但是函数指针长度可能与数据指针的长度不同。 指针的长度取决于使用的机器和编译器,例如:在现代windows上,指针是32位或是64位长 测试代码: #include<stdio.h> #include<math.h> #include<stdlib.h> #include<stddef.h> struct p{ int n; float f; }; int main() { struct p *sptr; printf("sizeof *char: %d\n", sizeof(char*)); printf("sizeof *int: %d\n", sizeof(int*)); printf("sizeof *float: %d\n", sizeof(float*)); printf("sizeof *double: %d\n", sizeof(double*)); printf("sizeof *struct: %d\n", sizeof

《51单片机C语言创新教程》

自作多情 提交于 2020-02-29 03:46:02
献给渴望学好单片机编程的朋友,一切只为了解密单片机编程高手的秘诀! ================================================================================= 《51单片机c语言创新教程》以宏晶公司的stc89c52rc单片机为蓝本,由浅人深,并结合smartm51开发板系统地介绍单片机的原理与结构、开发环境的使用、各种功能器件的应用。   《51单片机c语言创新教程》主要特色是边学边做,不是单纯的理论讲解,各章节中规中矩,遵循由简到繁、循序渐进的编排方式。本书大部分内容均来自作者的项目经验,因而许多c语言代码能够直接应用到工程项目中去,且代码风格良好。书中还介绍了usb通信、网络通信、数据校验、深入编程等,而这些内容在很多同类型书籍中并不具备,恰恰也是即将走出校门的大学生踏入社会工作经常要接触的。其中配套的光盘含有各实验的示例代码,可使读者在短时间内迅速掌握单片机的应用技巧,并可向读者提供配套的单片机开发板。   《51单片机c语言创新教程》既可作为大学本、专科单片机课程教材,也可作为相关技术人员的参考与学习用书。 ================================================================================= 送给渴望学好单片机的朋友:  

操作格子(C语言)

点点圈 提交于 2020-02-29 01:56:40
问题描述 有 n 个格子,从左到右放成一排,编号为 1-n。 共有 m 次操作,有 3 种操作类型: 1.修改一个格子的权值, 2.求连续一段格子权值和, 3.求连续一段格子的最大值。 对于每个 2、3 操作输出你所求出的结果。 输入格式 第一行 2 个整数 n,m。 接下来一行 n 个整数表示 n 个格子的初始权值。 接下来 m 行,每行 3 个整数 p,x,y,p 表示操作类型,p=1 时表示修改格子 x 的权值为 y,p=2 时表示求区间[x,y]内格子权值和,p=3 时表示求区间[x,y]内格子最大的 权值。 输出格式 有若干行,行数等于 p=2 或 3 的操作总数。 每行 1 个整数,对应了每个 p=2 或 3 操作的结果。 样例输入 4 3 1 2 3 4 2 1 3 1 4 3 3 1 4 样例输出 6 3 代码实现 # include <stdio.h> void xiugai ( int * a , int n , int x , int y ) //修改函数 { for ( int i = 0 ; i < n ; i ++ ) { if ( a [ i ] == x ) a [ i ] = y ; break ; } } void sum ( int * a , int n , int x , int y ) //求和函数 { int s = 0 ; int b

feof和EOF的字符被重复读取问题的思考

孤者浪人 提交于 2020-02-28 23:06:24
void main() { PNode pNode; FILE *fp=fopen("1.txt","r"); pNode=Create(i); while(getc(fp)!=EOF) { int i; fscanf(fp,"%d",&i); pNode=Add(i,pNode); } fclose(fp); Print(pNode); } (问题源码如上所示) 问题介绍 我在温习C语言时,准备尝试编写单链表的结构,但是写到上面一段代码,运行后发现,文件的最后一个字符被重复读取了,焦头烂脑思考了一会儿,并且尝试搜集资料,写了这个博客。 问题思考 这个问题根源在文件读取上,因为我尝试了直接向链表中添加数据是没有任何问题的。而本程序使用了两个文件读取函数,即getc和fscanf,这两个函数的交错使用在一定程度上是程序结构有点混乱,这可能是我当时编程的时候没有用心思考造成的。 如果文件自身没有设置EOF的话,我们的getc函数遇到'\0'之后,将设置为EOF,再进入循环体一次,而fscanf已经读取不到有效字符了,因此返回EOF,但是此时i的值仍为最后一个整数的值,因此将再次读取该值。如果将下面一句 getc(fp)!=EOF 改为!feof(fp),则问题仍会出现,原因同上。 代码解决之道 正确的做法应该是下面一段代码: PNode pNode; //从文件中读取数据并添加到链表中

leetcode 118 杨辉三角 C语言

a 夏天 提交于 2020-02-28 21:55:26
题目 leetcode 118 代码 int * * generate ( int numRows , int * returnSize , int * * returnColumnSizes ) { * returnSize = 0 ; int * * res = ( int * * ) malloc ( sizeof ( int * ) * numRows ) ; ( * returnColumnSizes ) = ( int * ) malloc ( sizeof ( int ) * numRows ) ; for ( int i = 0 ; i < numRows ; i ++ ) { res [ * returnSize ] = ( int * ) malloc ( sizeof ( int ) * ( i + 1 ) ) ; res [ * returnSize ] [ 0 ] = 1 ; int k = i - 1 ; for ( int j = 1 ; j < i ; j ++ ) { res [ * returnSize ] [ j ] = res [ k ] [ j - 1 ] + res [ k ] [ j ] ; } res [ * returnSize ] [ i ] = 1 ; ( * returnColumnSizes ) [ * returnSize

C语言 存储类型

折月煮酒 提交于 2020-02-28 20:22:33
C语言 存储类型 类型 作用域 生命周期 存储位置 auto变量 一对{}内 当前函数 栈区 static局部变量 一对{}内 整个程序运行期 初始化在data段,未初始化在BSS段 extern变量 整个程序 整个程序运行期 初始化在data段,未初始化在BSS段 static全局变量 当前文件 整个程序运行期 初始化在data段,未初始化在BSS段 extern函数 整个程序 整个程序运行期 代码区 static函数 当前文件 整个程序运行期 代码区 register变量 一对{}内 当前函数 运行时存储在CPU寄存器 字符串常量 当前文件 整个程序运行期 data段 内存分区 一、内存分区说明 代码区(text segment) 加载的是可执行文件代码段,所有的可执行代码都加载到代码区,这块内存是不可以在运行期间修改的。 未初始化数据区(BSS) 加载的是可执行文件BSS段,位置可以分开亦可以紧靠数据段,存储于数据段的数据(全局未初始化,静态未初始化数据)的生存周期为整个程序运行过程。 全局初始化数据区/静态数据区(data segment) 加载的是可执行文件数据段,存储于数据段(全局初始化,静态初始化数据,文字常量(只读))的数据的生存周期为整个程序运行过程。 栈区(stack) 栈是一种先进后出的内存结构,由编译器自动分配释放,存放函数的参数值、返回值、局部变量等

C语言 strncmp

时间秒杀一切 提交于 2020-02-28 19:45:06
C语言 strncmp #include <string.h> int strncmp(const char *s1, const char *s2, size_t n); 功能:比较 s1 和 s2 前n个字符的大小,比较的是字符ASCII码大小。 参数: s1:字符串1首地址 s2:字符串2首地址 n:指定比较字符串的数量 返回值: 相等:0 大于: > 0 小于: < 0 案例 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <string.h> #include <stdlib.h> #include <math.h> #include <time.h> int main(void) { char ch1[] = "hello world"; char ch2[] = "hallo world"; // 两个有限字符串比较 int value = strncmp(ch1, ch2); // 返回为1不相等 printf("%d\n", value); return 0; } strncmp 使用案例:使用函数 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <string.h> #include <stdlib.h>

C语言 sprintf

时间秒杀一切 提交于 2020-02-28 19:44:21
C语言 sprintf #include <stdio.h> int sprintf(char *str, const char *format, ...); 功能:根据参数format字符串来转换并格式化数据,然后将结果输出到str指定的空间中,直到出现字符串结束符 '\0' 为止。 参数: str:字符串首地址 format:字符串格式,用法和printf()一样 返回值: 成功:实际格式化的字符个数 失败: - 1 案例 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <string.h> #include <stdlib.h> #include <math.h> #include <time.h> int main(void) { char ch[100]; // 将内容放入ch内 sprintf(ch,"hello world"); sprintf(ch,"%02d+%02d=%02d",1,2,3); sprintf(ch, "%x+%o=%d", 0xabc, 2, 3); printf("%s\n", ch); return 0; } sprintf 使用案例 来源: https://www.cnblogs.com/xiangsikai/p/12378546.html

C语言 sscanf

╄→尐↘猪︶ㄣ 提交于 2020-02-28 19:41:58
C语言 sscanf #include <stdio.h> int sscanf(const char *str, const char *format, ...); 功能:从str指定的字符串读取数据,并根据参数format字符串来转换并格式化数据。 参数: str:指定的字符串首地址 format:字符串格式,用法和scanf()一样 返回值: 成功:参数数目,成功转换的值的个数 失败: - 1 案例 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <string.h> #include <stdlib.h> #include <math.h> #include <time.h> int main(void) { char ch[] = "1+2=3"; int a, b, c; // 将ch中的字符格式,转换为int格式 读取 sscanf(ch, "%d+%d=%d",&a,&b,&c); printf("%d\n", a); printf("%d\n", b); printf("%d\n", c); return 0; } sscanf 使用案例 来源: https://www.cnblogs.com/xiangsikai/p/12378550.html

C语言 strchr

|▌冷眼眸甩不掉的悲伤 提交于 2020-02-28 19:41:29
C语言 strchr #include <string.h> char *strchr(const char *s, int c); 功能:在字符串s中查找字母c出现的位置 参数: s:字符串首地址 c:匹配字母(字符) 返回值: 成功:返回第一次出现的c地址 失败:NULL 案例 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <string.h> #include <stdlib.h> #include <math.h> #include <time.h> int main(void) { char ch[] = "hello world"; char c = 'w'; // 查找字符串 char* p = strchr(ch, c); printf("%s\n", p); return 0; } strchr 使用案例 来源: https://www.cnblogs.com/xiangsikai/p/12378561.html