
C语言
flying_man_
嵌入式爱好者
展开
-
C语言中变量类型的分析总结
变量按作用范围来分可以分为局部变量和全局变量变量 Discription 局部变量 在函数内部定义的变量,函数内部的形参。作用范围在函数内部。 全局变量 在所有函数的外部的申明,称为全局变量 注意,全局变量不属于某个函数,而是整个源文件。如果外部文件要进行调用(比如两个不同的源文件),需要使用extern进行修饰。变量按存储类别分为静态存储、动态存储存储方...原创 2018-11-23 22:35:44 · 1171 阅读 · 0 评论 -
字符数组初始化问题
在C语言编程中,当我们声明一个字符串数组的时候,常常需要把它初始化为空串。总结起来有以下三种方式:(1) char a[10]=""; (2) char a[10]={'\0'}; (3) char a[10]; str[0]='\0';第1,2种方式是将a数组的所有元素都初始化为'\0',而第3种方式是只将str数组的第一个元素初始化为'\0'。如果数组的size非常大,那么前两种方式...原创 2018-01-08 13:29:24 · 2837 阅读 · 0 评论 -
数组的相关概念
在C语言中,数组与其它变量在使用上有很大的不同.无论是字符型、整型、实型变量,还是结构体类型或者指针类型的变量,语句中出现变量名都代表对该变量所在内存单元的访问,变量名代表整个变量在内存中的存储单元,可以向该变量赋值,也可以从中取出数据使用.但是定义一个数组之后,数组名并不代表整个数组所占据的内存单元,而是代表数组首元素的地址....原创 2018-01-13 12:54:28 · 202 阅读 · 0 评论 -
二位数组的定义和初始化
二维数组:二位数组的初始化:默认初始化int a[10][10]={0};不初始化:全局变量和static定义的二维数组部分初始化:int a[10][10]={{10,9,6,8},{6,5,4,8}};int a[10][10]={{10,9,6,8},,{6,5,4,8}};//错误全部初始化:int a[5][5]={{10,9,6,8,7},{6,5,4,8,6},{...原创 2018-01-11 15:34:20 · 7178 阅读 · 0 评论 -
字符数组和字符串的区别和联系
字符串和字符数组的区别和联系:C语言中没有用于表示字符串的关键字以数组形式将字符串输出字符串和字符数组的区别和联系:C语言中没有一个用于表示字符串的关键字c语言的字符串由C的字符数组变形而成,末尾加上'\0'字符串比字符数组多一个'\0'联系:都是一数组形式存储数据,字符之间地址连续,可以用下标来访问,同样的数据如果以字符数组和字符串存储大小有区别,字符串比字符数组大一个'\0',...原创 2018-01-08 13:43:01 · 17740 阅读 · 0 评论 -
字符数值赋值问题
一个字符串,如"feiren",一般为字符串常量,可以用它对字符指针赋值,或初始化,相当于把这个字符串常量的首地址赋给这个指针,如:char *p = "feiren";或者char *p;p="feiren";但是,当用"hello"给字符数组作初始化时,"hello",并非一个字符串常量,而是相当于一个初始化列表{'h','e','l','l','o','\0'},在其他...原创 2018-01-13 02:18:07 · 1200 阅读 · 0 评论 -
fgets使用要点
1. 问题描述:fgets函数的原型为char *fgets(char *buf, int bufsize, FILE *stream);可以录入bufsize-1个字符。(1)如果键盘输入的字符个数少于bufsize-1个,函数会将回车录走,输出是将回车打印出来;(2)如果键盘输入的字符大于bufsize-1个,函数录走bufsize-1个字符后,剩下的字符留在数据缓冲区,下次调...原创 2018-01-15 13:21:19 · 648 阅读 · 0 评论 -
提示用户输入信息,并将用户输入的写入一个文件,当用户输入的信息 是quit的时候,打印输出用户输入的总长度
/***************************************************> Copyright (C) 2018 ==yangzheng== All rights reserved.> File Name: shuru.c# Author: feiren# mail:512981510@qq.com> Created Time: 2018...原创 2018-01-15 13:23:33 · 1750 阅读 · 0 评论 -
使用sqlite3的接口函数完成一个用户登录验证功能模块设计 要封装成独立函数,在独立的main中调用测试;
/*====================================================* Copyright (C) 2018 All rights reserved.** 文件名称:sqltie3_get_tables.c* 创 建 者:cyz 2848319176@qq.com* 创建日期:2018年01月15日* 描 述:2、...原创 2018-01-15 20:35:23 · 389 阅读 · 0 评论 -
插入排序
for(i=1;i<10;i++){ k = a[j];//将要插入的数赋值给K; j = i-1; while((j>=0)&&(a[j])>k) { a[j+1]=a[j]; j--; } a[j+1] = k;}其中i时插入元素的位置,j+1为合适的元素插入位置,whil...原创 2018-12-17 11:58:23 · 195 阅读 · 0 评论 -
typedef定义类型
typedef 原类型名字 新类型名字;typedef int INTEGER:typedef char CHAR;typedef也可以说明结构体typedeff struct{ 数据类型 成员名; 数据类型 成员名; ...;}STU;STU student1;注意:typedef int arr[10];arr a,b;如上a...原创 2018-12-17 08:20:58 · 746 阅读 · 0 评论 -
枚举类型
enum 枚举名{ 标识符[=整型常数], 标识符[=整型常数], ...,}枚举变量;例如:enum weekday{ sun, mon, tue, wed, thu, fri, sat,};注意事项:(1)在C语言中,将枚举元素按照常量进行处理,因此也成为枚举常量。既然是常量就不能(在定义之后)...原创 2018-12-14 11:46:05 · 221 阅读 · 0 评论 -
sizeof和strlen的区别
Sizeof与Strlen的区别与联系(转)1.sizeof操作符的结果类型是size_t,它在头文件中typedef为unsigned int类型。该类型保证能容纳实现所建立的最大对象的字节大小。 2.sizeof是算符,strlen是函数。 3.sizeof可以用类型做参数,strlen只能用char*做参数,且必须是以''\0''结尾的。sizeof还可以用函数做参数,比如: short f...转载 2018-01-08 15:50:03 · 151 阅读 · 0 评论 -
malloc(内存管理)
内存管理:Makefile内存管理 ==》每一个进程都有4G的虚拟内存虚拟内存的划分:由低地址向高地址:代码段==》静态(常量)存储区==》堆区==》栈区==》OS内存管理区域==》静态存储区、栈区、堆区内存管理方式==》申请 释放静态存储区:申请 程序启动时候变量定义释放 程序结束自动释放注意:在运行期间,静态存储区只能用不能放栈区:申请 在作用范围内的第一次变量申...原创 2018-01-14 16:04:48 · 617 阅读 · 0 评论 -
指针的应用
======================================================指针==>C语言特有的指针==>C新的构造数据类型定义格式:<存储类型> 数据类型 *变量名称char *pa;==》目标内存大小1个字节short *pb;==》目标内存大小2个字节int *pc;==》目标内存大小4个字节...指针的初始...原创 2018-01-11 15:35:44 · 228 阅读 · 0 评论 -
gcc编译过程
首先第一步预处理:cpp作用:头文件展开,宏替换,注释去掉。具体代码操作如下:gcc -E hello.c -o hello.i第二步:通过编译器C文件变成汇编文件(将预处理完的.i文件进行一系列的词法分析、语法分析、语义分析及优 化后生成响应的汇编代码文件,这是整个程序构建的最核心的部分,也是最复杂的部分)gcc -S hello.i -o hello.s第三...原创 2019-03-12 11:27:48 · 253 阅读 · 0 评论 -
数组的内涵(与指针比较)
以下内容 以64位系统为例数组的内涵: (1)数组名的内涵在于其指代实体是一种数据结构,这种数据结构就是数组; (2)数组名的外延在于其可以转换为指向其指代实体的指针,而且是一个指针常量; (3)指向数组的指针则是另外一种变量类型(在WIN32平台下,长度为4),仅仅意味着数组的存放地址!数组和指针的区别: (1)数组名作为函数形参时,...原创 2019-03-16 18:50:50 · 313 阅读 · 0 评论 -
动态库(共享库)的制作及优缺点
1)命名规则 lib 名字 +.so2)制作步骤1、生成与位置无关的代码(生成与位置无关的.o) gcc -fPIC -c *.c -o *.o -I ../include-I 指定头文件路径2、把.o打包共享库(动态库)gcc -shared -o libMycalc.so *.o -I include3)使...原创 2019-03-13 21:55:52 · 817 阅读 · 0 评论 -
gcc编译中注意的问题
例如在源文件中如何我们的头文件写成#include "head.c",表示在当前路径查找头文件,如果头文件的路径不在当前路径,我们可以通过一下方式指定头文件的路径。gcc hello.c -I ./头文件路径 -o 可执行文件在我们的程序中往往都会有许多调试程序,这些调试程序在完成代码后都是要去掉的,所以为了优化代码和调试代码的方便,在程序中我们是通过#ifdef .... #end...原创 2019-03-12 11:58:14 · 461 阅读 · 0 评论 -
带参宏定义和带参函数的区别
在带参宏定义中,不会为形式参数分配内存,因此不必指明数据类型。而在宏调用中,实参包含了具体的数据,要用它们去代换形参,因此必须指明数据类型。这一点和函数是不同的:在函数中,形参和实参是两个不同的变量,都有自己的作用域,调用时要把实参的值传递给形参;而在带参数的宏中,只是符号的替换,不存在值传递的问题。...原创 2019-03-04 21:42:56 · 5289 阅读 · 0 评论 -
局部变量和全局变量
局部变量:在一个函数内部的变量就是局部变量,作用范围在函数内部所有的语句块,即由一对大括号确定其作用范围;注意:局部变量具有屏蔽作用原因:如果内层作用域中定义的变量和已经声明的某个外层作用域变量有着相同的名字,在内层中使用这个变量名,将屏蔽外层作用域的那个变量,直到内存作用域为止,这就是局部变量的屏蔽作用。全局变量:一个变量在所有函数外声明就是全局变量,顾名思义,全局变量就是可以在任何...原创 2018-12-20 09:48:34 · 835 阅读 · 1 评论 -
数组指针和指针数组
数组指针(也称行指针)定义 int (*p)[n];()优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的长度是n,也可以说是p的步长。也就是说执行p+1时,p要跨过n个整型数据的长度。如要将二维数组赋给一指针,应这样赋值:int a[3][4];int (*p)[4]; //该语句是定义一个数组指针,指向含4个元素的一维数组。p=a; //将该二...转载 2018-01-11 16:19:10 · 137 阅读 · 0 评论 -
选择排序
2、选择排序for(i=0;i<n;i++){min = i;for(j=i+1;j<n;j++){if(a[min]>a[j])min= j;}if(min!=i){t = a[i];a[i]=a[min];a[min]=t;}}原创 2018-01-08 00:53:05 · 156 阅读 · 0 评论 -
C语言宏定义和宏定义函数
转自:https://www.cnblogs.com/bytebee/p/8205707.htmlC语言宏定义和宏定义函数 宏定义可以帮助我们防止出错,提高代码的可移植性和可读性等。 在软件开发过程中,经常有一些常用或者通用的功能或者代码段,这些功能既可以写成函数,也可以封装成为宏定义。那么究竟是用函数好,还是宏定义好?这就要求我们对二者进行合理的取舍。 我们来看一个例...转载 2019-03-10 17:13:18 · 2530 阅读 · 0 评论 -
通过C语言创建sql脚本文件,利用sqlite3 xxx.db < xxx.sql 生成xxx.db
/***************************************************> Copyright (C) 2018 ==yangzheng== All rights reserved.> File Name: mysql.c# Author: feiren# mail:512981510@qq.com> Created Time: 2018...原创 2018-01-15 20:32:55 · 972 阅读 · 0 评论 -
通过选择排序,实现对用户输入的数字进行排序
/***************************************************> Copyright (C) 2018 ==KINGYI== All rights reserved.> File Name: xuanzhe.c# Author: cyz# mail:512981510@qq.com> Created Time: 2018年01月...原创 2018-01-08 11:17:59 · 875 阅读 · 0 评论 -
gets和scanf的区别
gets 【1】函数:gets(字符指针) 【2】头文件:stdio.h(c中),c++不需包含此头文件 【3】原型:char*gets(char*buffer); 【4】功能:从stdin流中读取字符串,直至接受到换行符或EOF时停止,并将读取的结果存放在buffer指针所指向的字符数组中。换行符不作为读取串的内容,读取(接受)的换行符被转换为nu...转载 2018-01-06 23:09:00 · 232 阅读 · 0 评论 -
冒泡核心算法
冒泡遍历核心算法:for(i=0;i<n-1;i++){for(j=0;j<n-i-1;j++){if(a[j]>a[j+1]){t=a[j];a[j]=a[j+1];a[j+1]=t;}}}for(i=0;i<n;i++)printf("%d ",a[i]);原创 2018-01-07 21:44:28 · 283 阅读 · 0 评论