c语言

C语言进阶之路(一)----C语言的内存四区模型

这一生的挚爱 提交于 2020-04-07 21:51:32
1.内存四区模型: 操作系统给C/C++编写的程序分配内存,通常将分配的内存划分为以下四个区域: 1.1栈区(stack):栈stack是一种先进后出的内存结构,所有的局部变量,函数的形参都是由编译器自动放出栈中,当一个自动变量超出其作用域时,自动从栈中弹出,用完由操作系统自动释放 1.2堆区(heap):堆区需要程序员手动分配,手动释放,在C语言中可使用malloc进行分配。 1.3数据区: 静态区:全局变量以及程序中的静态变量。 常量区(static):字符串、常量。C编译器对于相同的字符串会自动进行优化分配为统一的地址。 1.4代码区: 存放程序的二进制代码,程序被操作系统加载到内存的时候,所有的可执行代码都加载到代码区,也叫代码段,这块内存是不可以在运行期间修改的。 例子: //main.cpp int a = 0; //全局初始化区 char *p1; //全局未初始化区 main() { int b; //栈 char s[] = "abc"; //栈 ,编译时将"abc"存储到常量区,运行时将常量区的值拷贝靠栈区。 char *p2; //栈 char *p3 = "123456"; //123456\\0在常量区,p3在栈上。 static int c =0;//全局(静态)初始化区 p1 = (char *)malloc(10); p2 = (char *

C语言入门

淺唱寂寞╮ 提交于 2020-04-07 16:43:48
文章转自 https://www.imooc.com/course/programdetail/pid/37 c语言入门 C语言一经出现就以其功能丰富、表达能力强、灵活方便、应用面广等特点迅速在全世界普及和推广。C语言不但执行效率高而且可移植性好,可以用来开发应用软件、驱动、操作系统等。C语言也是其它众多高级语言的鼻祖语言,所以说学习C语言是进入编程世界的必修课。 hello,world #include<stdio.h> int main() { /*在双引号中间输入Hello World*/ printf("Hello World"); return 0; } 注:在最新的C标准中,main函数前的类型为 int 而不是 void c语言的具体结构 简单来说,一个C程序就是由若干 头文件 和 函数 组成。 #include <stdio.h> 就是一条预处理命令, 它的作用是通知C语言编译系统在对C程序进行正式编译之前需做一些预处理工作。 函数 就是实现代码逻辑的一个小的 单元 。 必不可少之主函数 一个C程序有且只有一个主函数,即 main 函数。 C程序就是执行主函数里的代码,也可以说这个 主函数 就是C语言中的 唯一入口 。 而 main 前面的 int 就是主函数的类型. printf() 是 格式输出 函数,这里就记住它的功能就是在 屏幕上输出指定的信息 return

C语言综合运用-------------编写 < 通讯录 >

半城伤御伤魂 提交于 2020-04-07 13:29:18
// // main.c // 通讯录项目 // // Created by Elkins.Zhao on 15/3/24. // Copyright (c) 2015年 elkins. All rights reserved. // #include <stdio.h> // 导入头文件 #include <string.h> // 定义宏(联系人数组的长度,姓名长度,电话号码长度) #define LEN 100 #define NAME_LEN 22 #define TELNUM_LEN 16 // 定义联系人结构体 typedef struct { // 定义联系人姓名 char name[NAME_LEN]; // 定义联系人电话号码 char telNum[TELNUM_LEN]; } Person; // 给结构体起别名 // 定义联系人数组 Person contacts[LEN]; // 定义变量保存联系人数量 int totalContactCount = 0; // 初始化为0,表示通讯录没有人 // 定义变量保存文件名称 char *filePath = "telbook.data"; // 定义函数并声明 void doAdd(); // 添加联系人 void doDelete(); // 删除联系人 void doUpdate(); // 更新联系人

C语言字符串操作详细总结

拥有回忆 提交于 2020-04-07 11:34:55
1)字符串操作 strcpy(p, p1) 复制字符串 strncpy(p, p1, n) 复制指定长度字符串 strcat(p, p1) 附加字符串 strncat(p, p1, n) 附加指定长度字符串 strlen(p) 取字符串长度 strcmp(p, p1) 比较字符串 strcasecmp忽略大小写比较字符串 strncmp(p, p1, n) 比较指定长度字符串 strchr(p, c) 在字符串中查找指定字符 strrchr(p, c) 在字符串中反向查找 strstr(p, p1) 查找字符串 strpbrk(p, p1) 以目标字符串的所有字符作为集合,在当前字符串查找该集合的任一元素 strspn(p, p1) 以目标字符串的所有字符作为集合,在当前字符串查找不属于该集合的任一元素的偏移 strcspn(p, p1) 以目标字符串的所有字符作为集合,在当前字符串查找属于该集合的任一元素的偏移 * 具有指定长度的字符串处理函数在已处理的字符串之后填补零结尾符 2)字符串到数值类型的转换 strtod(p, ppend) 从字符串 p 中转换 double 类型数值,并将后续的字符串指针存储到 ppend 指向的 char* 类型存储。 strtol(p, ppend, base) 从字符串 p 中转换 long 类型整型数值,base 显式设置转换的整型进制

【C语言】23-typedef

久未见 提交于 2020-04-07 07:32:26
一、typedef作用简介 * 我们可以使用typedef关键字为各种数据类型定义一个新名字(别名)。 1 #include <stdio.h> 2 3 typedef int Integer; 4 typedef unsigned int UInterger; 5 6 typedef float Float; 7 8 int main(int argc, const char * argv[]) { 9 Integer i = -10; 10 UInterger ui = 11; 11 12 Float f = 12.39f; 13 14 printf("%d %d %.2f", i, ui, f); 15 16 return 0; 17 } 在第3、第4、第6行分别给int、unsigned int、float起了个别名,然后在main函数中使用别名定义变量,用来跟原来的基本类型是完全一样的。输出结果: 当然,给类型起别名后,原来的int、float还是可以正常使用的: int i = 10; float f = 10.0f; * 也可以在别名的基础上再起一个别名 typedef int Integer; typedef Integer MyInteger; 二、typedef与指针 除开可以给基本数据类型起别名,typedef也可以给指针起别名 1 #include

3、C语言 —— 基本数据类型

我们两清 提交于 2020-04-07 01:14:06
一、C语言的数据类型 空类型(void) 指针类型(void *) 构造类型 数组 结构体(struct) 共用体(union) 枚举(enum) 基本数据类型 整型(int) 浮点型(单精度 float,双精度 double) 字符型(char) 二、基本数据类型所占存储空间(16位编译器下) int -> 整型 -> 2个字节 float -> 单精度浮点型 -> 4个字节 double -> 双精度浮点型 -> 8个字节 char -> 字符型 -> 1个字节 三、类型修饰符 short 短型 long 长型 signed 有符号型 unsigned 无符号型 四、char // char取值范围是 ASCII码字符 或 -128~127的整数 // char只能存储一个字符 char a = 'A'; char b = 65; printf("%c %c", a, b); // 输出A printf("%d %d", a, b); // 输出65 五、不同编译器环境下基本数据类型的存储长度 来源: oschina 链接: https://my.oschina.net/u/1444783/blog/279652

1、C语言 —— Hello World

六眼飞鱼酱① 提交于 2020-04-06 22:49:16
一、工欲善其事,必先利其器。咱们要神器Xcode来进行C语言学习。 (可在App Store中下载,也可在迅雷的Thunder Store中下载) 二、点击Xcode,选择 “Create a new Xcode project” ,意思你我都懂的 三、左边选择 “OS X Application” ,右边选择 “Command Line Tool” ,这个是命令行程序,即非图形化,Next 四、输入工程名字,并选择C语言。其他不用管,然后Next保存到自己想保存的地方 五、点击 “main.c” 文件,即可看到已生成的代码,(代码的解释均为图中绿色的注释) 六、点击左上角run运行,即可看到输出 七、了解C语言的运行过程(详情: M了个J博客 ) 来源: oschina 链接: https://my.oschina.net/u/1444783/blog/208766

C语言——第七周作业

不打扰是莪最后的温柔 提交于 2020-04-06 20:31:53
题目 题目一:求交错序列前N项和 1.实验代码 #include <stdio.h> int main() { int n , i , b ; double sum = 0 , a , c ; scanf("%d",&n); a = 1; b = 1; for( i = 1 ; i <= n ; i++) { c = a * i / b; sum += c; a = -a; b += 2; } printf("%.3f",sum); } 2.设计思路 ①算法 第一步:定义变量。 第二步:输入序列项的数目n。 第三步:使用循环语句,i的初始值为1,当i小于等于项数N时,循环继续,c = a * i / b (c为序列中每一项的值,a的值用来确定每一项的正负,i表示每一项的分子,b表示每一项的分母),sum = sum + c (计算序列和,sum初始值为1),a = -a(序列中奇数项为正,偶数项为负,a初始值为1),b = b + 2(相邻两项中,后一项比前一项大2,b初始值为1). 第四步:输出sum(即序列的前n项和)。 ②流程图 3.本题未遇到问题 4.本题PTA提交列表 题目二:统计学生平均成绩及及格人数 1.实验代码 #include<stdio.h> int main() { int n , i , count = 0; int a[10001]; double

C语言中 *.c和*.h文件的区别!

泪湿孤枕 提交于 2020-04-06 13:19:41
C语言中 *.c和*.h文件的区别! http://blog.163.com/jiaoruijun07@126/blog/static/68943278201042064246409/ 这是HR面试我的一道题,没技术上含量,不过细想起来,还是C语言的最基本的知识!俗话说,目标决定动力,细节决定成败! C文件就是C语言系列的源文件,而H文件则是C语言的头文件,即C系列中存放函数和全局变量的文件,因为C中的函数是被封装起来的,即无法看到其代码。 子程序不要定义在*.h中。函数定义要放在*.c中,而*.h只做声明.否则多引用几次,就会发生函数重复定义的错误。*.h只做声明,编译后不产生代码。这样做目的是为了实现软件的模块化,使软件结构清晰,而且也便于别人使用你写的程序。 纯粹用 C 语言语法的角度,你当然可以在*.h 中放任何东西,因为 #include 完全等价于把*.h 文件 Ctrl-C Ctrl-V 到*.c 中,*.h 中应该都是一些宏定义和变量、函数声明,告诉别人你的程序“能干什么、该怎么用”。*.c 中是所有变量和函数的定义,告诉计算机你的程序“该怎么实现”。当然,如果一个*.h 被多个*.c 包含,而且*.h 中有对象(变量或函数)的定义,就会发生重复定义的错误了,声明可以无穷多次,定义只能一次。 一般来说,一个C文件应该是一个模块,如果你的程序仅仅有一个模块

C语言动态内存分配:(一)malloc/free的实现及malloc实际分配/释放的内存

大兔子大兔子 提交于 2020-04-06 08:36:28
一、malloc/free概述 malloc是在C语言中用于在程序运行时在堆中进行动态内存分配的库函数。free是进行内存释放的库函数。 1、函数原型 #include <stdlib.h> void *malloc( size_t size ); void free( void* memblock ); 2、返回值 成功时,返回所分配存储空间的起始地址;返回值类型为void*,在C语言中可以把void*直接付给具体的类型,但是在C++中必须进行强制类型转换 失败时(内存不足时)返回NULL size为0时,返回的指针不是NULL;但是除了free,别的地方不要使用这个指针。 3、使用示例 #include <stdlib.h> /* For _MAX_PATH definition */ #include <stdio.h> #include <malloc.h> void main( void ) { char *string; /* Allocate space for a path name */ string = malloc( _MAX_PATH ); // In a C++ file, explicitly cast malloc's return. For example, // string = (char *)malloc( _MAX_PATH ); if(