
c基础知识
小小城御园
生命在于折腾,知识在于积累
展开
-
原码、反码、补码详解
一. 机器数和真值1、机器数 任何一个数在计算机中都是以二进制形式表示, 叫做机器数。机器数是带符号的,在计算机用一个数的最高位存放的是符号, 正数为0, 负数为1. 例:十进制中的数 +5,计算机字长为8位,转换成二进制就是00000101。如果是 -5,就是 10000101 。那么,这里的 00000101和 10000101 就是机器数。2...原创 2018-11-11 20:24:57 · 672 阅读 · 0 评论 -
c语言除法计算和取模计算
下面的题目你可以全部都做对么:3/4=? 3%4=? 3/-4=? 3%-4=? -3/4=? -3%4=? -3/-4=? -3%-4=?如果你无法全部准确的做出请看下面的解答除法的取整分类除法的取整分为三类:向上取整、向下取整、向零取整。1、向上取整:向+∞方向取最接近精确值的整数。在这种取整方式下,6/5=2 6/(-5)=-1 6/4=2 6/(-3)=-22、向下...原创 2019-05-25 17:23:20 · 14995 阅读 · 0 评论 -
命令行处理函数getopt的使用方法
日常开发中,会经常对命令行参数进行处理,当参数比较少的时候,可以手动处理,但是当参数过多的时候就要使用getopt来处理了。int getopt(int argc, char * const argv[], const char *optstring);extern char *optarg;extern int optind, opterr, op...原创 2019-05-12 21:09:45 · 456 阅读 · 0 评论 -
命令行处理函数getopt_long的使用方法
getopt_long函数,getopt_long函数具有getopt函数的所有功能,并且还可以指定“长参数”,getopt_long比getopt多了两个参数: int getopt_long(int argc, char * const argv[], const char *optstring, ...原创 2019-05-12 22:00:40 · 375 阅读 · 0 评论 -
error: lvalue required as unary ‘&’ operand错误解决
#include <stdio.h>#include <stdlib.h>#include <string.h>#include <fcntl.h>#include <sys/time.h>#include <argz.h>int main(void){ size_t len; char *b...原创 2019-05-26 13:38:01 · 35675 阅读 · 0 评论 -
库函数argz_add、argz_add_sep使用方法
一、argz_add函数函数原型:error_t argz_add(char ** argz ,size_t * argz_len ,const char * str); 头文件:#include <argz.h> 返回值:0:成功ENOMEM:空间不足 功能:在数组* argz的末尾添加字符串str,并更新* argz和* argz_len: argz...原创 2019-05-26 14:40:02 · 621 阅读 · 0 评论 -
库函数argz_append、argz_count使用方法
一、argz_append函数函数原型:error_t argz_append(char ** argz,size_t * argz_len,const char * buf,size_t buf_len); 头文件:#include <argz.h> 返回值:0:成功ENOMEM:空间不足 功能:在(* argz,* argz_len)之后追加argz向量(buf,b...原创 2019-05-26 15:14:37 · 1136 阅读 · 0 评论 -
memset效率分析
glibc库的memset和自写的memset效率对比 glibc下的memset的实现方式是以以下思路进行#define OPSIZ (sizeof(unsigned long int))1、长度len小于8的时候,会一位一位进行赋值。2、长度len大于或者等于8的时候,32位机器按每次4个字节OPSIZ来读写,64位机器按每次8个字节OPSIZ来读写,连...原创 2019-05-22 23:21:00 · 2915 阅读 · 1 评论 -
linux编译错误整理
Ambiguous operators need parentheses — 不明确的运算需要用括号括起 Ambiguous symbol xxx — 不明确的符号 Argument list syntax error — 参数表语法错误 Array bounds missing — 丢失数组界限符 Array size toolarge — 数组尺寸太大 Bad charact...原创 2019-06-02 17:01:06 · 657 阅读 · 0 评论 -
负数右移学习笔记
右移位和左移位不同,一共有两种方案:一种是逻辑移位,左边移入的位用0填充;另一种是算术移位,左边移入的位由原先该值的符号位决定,符号位为1则移入的位均为1,符号位为0则移入的位均为0,这样能够保证原数的正负形式不变。如果值10010110右移两位,逻辑移位的结果是00100101,但算术移位的结果是11100101.算术左移和逻辑左移是相同的,他们只在右移时不同,而且只有当操作数是负...原创 2019-08-10 23:06:47 · 1455 阅读 · 0 评论 -
位操作符学习笔记
位操作符分为AND、OR、XOR。 AND操作:如果两个位都是1,结果为1,否则为0,操作符为& 0 1 0 0 0 1 0 1 OR操作:如果两个位都是0,结果为0,否则为1,操作符为| 0 1 0 0 1 1 1 1 XO...原创 2019-08-10 23:25:08 · 114 阅读 · 0 评论 -
点阵字库HZK32的使用方法和显示
汉字库种类非常多,但是都是按照顺序排列的。前一个字节为该汉字的区号,后一个字节为该字的位号。每一个区记录94个汉字,位号则为该字在该区中的位置。因此,汉字在汉字库中的具体位置计算公式为:(94*(区号-1)+位号-1)*字节数(一个汉字字模占用的字节数)。以32*32点阵字库为例,计算公式则为:(94*(区号-1)+(位号-1))*32*32/8。32*32字模为长和宽都是32位的数...原创 2019-05-18 23:43:18 · 5170 阅读 · 0 评论 -
error:a label can only be part of a statement and a declaration is not a statement解决办法
原因是由于我在case之后进行变量的声明而导致的错误对此问题的分析: 由于switch的几个case语句在同一个作用域(因为case 语句只是标签,它们共属于一个swtich语句块),所以如果在某个case下面声明变量的话,对象的作用域是在俩个花括号之间 也就是整个switch语句,其他的case语句也能看到,这样的话就可能导致错误。我们可以通过在case后面的语...原创 2019-04-24 21:52:40 · 32236 阅读 · 6 评论 -
可变参数的应用-printf函数的实现
可变参数最典型的应用就是打印函数的格式化输出,下面就以一个简单的程序讲解printf函数的实现实际上是依赖于字符的打印,所有打印的实现都离不开字符的打印,下面就以字符的打印实现几个格式化输出的函数,其中主要用到的可变参数。字符函数的打印就使用: printf("%c",char);下面就使用字符的打印实现格式化输出函数#include <stdio.h>...原创 2019-01-08 23:14:44 · 388 阅读 · 0 评论 -
C数据存储
C程序大致来讲可以分为四个数据区:常量区,静态去,堆区,栈区。1.其中常量区存储了未被作为初始化使用的字符串常量和被const修饰的全局变量,其特点是只可被访问不可被写入,生命周期同程序的运行过程。Char *p=”asdf”;//asdf会被存储在常量区Char p[4]=”asdf”;//asdf不会被存储在常量区2.静态区存储了全部的全局变量,和所有被static修饰的变量(...原创 2018-01-20 17:00:46 · 289 阅读 · 0 评论 -
gdb调试命令
Gdb单步调试常用命令:(以test.c为例)1. 想用gdb调试在编译的时候需要加上-g选项:gcc -Wall -g test.c -o test.c这样就会生成一个支持gdb调试的test.o文件2. gdb ./test.o 开始gdb调试3. break fun 在函数名为fun的地方打断点break 10 在函数的第十行打断点4. list 打印运行位...原创 2018-01-16 22:05:24 · 286 阅读 · 0 评论 -
void value not ignored as it ought to be解决方法
编译时出现“void value not ignored as it ought to be”错误,原因是因为,一个函数的返回值为void,但是你又把这个函数的返回值赋值给了一个具体类型的变量。例:代码如下#include <linux/init.h>#include <linux/module.h>struct globalfifo_dev { unsi...原创 2018-12-13 22:34:39 · 83188 阅读 · 0 评论 -
error :dereferencing pointer to incomplete type错误解决
该错误指的是是不完整的类型,一般出现在定义结构体指针类型声明的时候。真正出现的问题原因是这个结构体根本就没有定义,或者是定义的头文件并没有被正确引用进来。想要解决该问题,有两种方法可供参考:1.包含定义该结构体的头文件2.如果结构定义在c文件中,而不是定义在h文件的话,建议将结构体定义在h文件中,然后再包含.h的这种做法3.直接将该结构体拷贝到报错的文件中(不建议使用)例:...原创 2018-12-13 22:42:49 · 61897 阅读 · 2 评论 -
function declaration isn’t a prototype错误解决办法
一般出现该问题的原因为,一个函数在没有参数的情况下没有赋参数void。例:程序如下#include <linux/init.h>#include <linux/module.h>static int globalfifo_setup_cdev(){ return 1;}static int __init globalfifo_init(voi...原创 2018-12-13 22:51:03 · 17123 阅读 · 0 评论 -
c和指针读书笔记三之转义字符
想在一些上下文中使用某一些特定字符的时候,比如说“”双引号,此时我们可以使用转义字符\,\?表示的是?,\”可以表示”,同事也可以防止三字母词。以下几种情况属于例外情况:\a 警告字符\b 退格键\f 进制字符\n 换行符\r 回车符\t 水平制表符\v 垂直制表符\ddd 表示1~3位八进制数所代表的字符 \ddd 表示1~3位八进制数所代...原创 2019-01-03 23:37:35 · 268 阅读 · 0 评论 -
为什么char类型的范围是 -128~+127
在C语言中, signed char 类型的范围为-128~127,每本教科书上也这么写,但是没有哪一本书上(包括老师)也不会给你为什么是-128~127,这个问题貌似看起来也很简单容易, 以至于不用去思考为什么,不是有一个整型范围的公式吗: -2^(n-1)~2^(n-1)-1 n为整型的内存占用位数,所以int类型32位 那么就是 -(2^31)~2^31 -1 即 -21474...转载 2019-01-04 22:22:11 · 249 阅读 · 0 评论 -
c和指针读书笔记一之编译
Gcc的编译流程分为了四个步骤: 1.预处理,生成预编译文件(.文件):gcc –E hello.c –o hello.i 2.编译,生成汇编代码(.s文件):gcc –S hello.i –o hello.s 3.汇编,生成目标文件(.o文件):gcc –c hello.s –o hello.o 4.链接,生成可执行文件: gcc ...原创 2019-01-02 22:03:59 · 159 阅读 · 0 评论 -
c和指针读书笔记二之注释
C语言中的注释以/*开始以*/结束,中间可以包含出*/之外的全部字符,注释不可以嵌套。注释会在预处理阶段被替换掉,取而代之的是一个空格,因此只要是可以在任何空格出现的位置出现。以下语句是等价的:y=x+1;y = x + 1;y =x+1;下面一组前三个语句是一致的:IntX;Int x;Int /*111111*/ x;Intx;...原创 2019-01-02 23:17:54 · 161 阅读 · 0 评论 -
可变参数列表
可变参数列表是通过宏来实现的,最典型的应用是printf函数的实现,这些宏定义于stdarg.h头文件,他是标准库的一部分。这个头文件生命了一个类型vs_list和三个宏:va_start、va_arg、va_end。我们可以声明一个va_List的变量,与这几个宏配合使用。例:编写一个函数计算几个数的平均值,函数的第一个参数为要计算的数的个数#include <stdio.h&g...原创 2019-01-08 22:53:18 · 2018 阅读 · 0 评论 -
double、long、unsigned、int、char类型数据在c语言中所占字节数学习笔记
标准中没有说明各个类型的数据分别占多少字节,但是规定如下:长整型至少和整形一样长, 整形应该至少应该和短整形一样长, 短整型至少为16位, 长整型至少是32位。 一般数据类型占有的字节的数跟编译器有关,和你的电脑是32位还是64位无关,由编译器在编译期间指定 16位编译器 32位编译器 64位编译器 char 1 1 ...原创 2019-08-11 17:44:47 · 473 阅读 · 0 评论