C 基础
文章平均质量分 71
lianliange85
这个作者很懒,什么都没留下…
展开
-
typedef 用法
不管实在C还是C++代码中,typedef这个词都不少见,当然出现频率较高的还是在C代码中。typedef与#define有些相似,但更多的是不同,特别是在一些复杂的用法上,就完全不同了,看了网上一些C/C++的学习者的博客,其中有一篇关于typedef的总结还是很不错,由于总结的很好,我就不加修改的引用过来了,以下是引用的内容(红色部分是我自己写的内容 )。用途一: 定义一种类型的别转载 2012-09-14 11:07:34 · 293 阅读 · 0 评论 -
C基本数据类型
速查表:char -128 ~ +127 (1 Byte)short -32767 ~ + 32768 (2 Bytes)unsigned short 0 ~ 65536 (2 Bytes)int -2147483648 ~ +2147483647 (4 Bytes)unsigned int 0 ~ 4294967295 (4 Bytes)long == int转载 2014-10-12 10:11:58 · 502 阅读 · 0 评论 -
atoi 函数实现
#define INT_MAX ((int)0x7FFFFFFF) #define INT_MIN ((int)0x80000000)//#define INT_MAX (~(unsigned int)0/2)bool valid = true;int myatoi(const * str){ int num = 0; valid = false; if(NULL != st原创 2014-10-31 11:17:09 · 411 阅读 · 0 评论 -
strlen()实现
一个10分的strlen函数了,完美的版本为:int strlen( const char *str ) //输入参数const,2分{ assert( strt != NULL ); //断言字符串地址非0,3分 int len; while( (*str++) != '\0' ) // 3分 { len++; }转载 2014-10-19 11:10:52 · 886 阅读 · 0 评论 -
(嵌入式)位(bit)操作
嵌入式系统总是要用户对变量或寄存器进行位操作。给定一个整型变量a,写两段代码,第一个设置a的bit 3,第二个清除a 的bit 3。在以上两个操作中,要保持其它位不变。 对这个问题有三种基本的反应:1)不知道如何下手。该被面者从没做过任何嵌入式系统的工作。2) 用bit fields。Bit fields是被扔到C语言死角的东西,它保证你的代码在不同编译器之间是转载 2014-10-19 11:36:58 · 2120 阅读 · 0 评论 -
数据结构对齐
对齐的算法: 由于各个平台和编译器的不同,现以本人使用的gcc version 3.2.2编译器(32位x86平台)为例子,来讨论编译器对struct数据结构中的各成员如何进行对齐的。 在相同的对齐方式下,结构体内部数据定义的顺序不同,结构体整体占据内存空间也不同,如下: 设结构体如下定义: struct A { int a;转载 2014-10-11 10:08:53 · 1405 阅读 · 0 评论 -
字符数组 与 字符指针(使用前分配内存)
1.字符指针可以指向一个字符串。我们可以用字符串常量对字符指针进行初始化。例如,有说明语句:char *str = "This is a string.";是对字符指针进行初始化。此时,字符指针指向的是一个字符串常量的首地址,即指向字符串的首地址。这里要注意字符指针与字符数组之间的区别。例如,有说明语句:char string[ ]="This is a string.";转载 2014-12-29 22:59:09 · 4128 阅读 · 2 评论 -
getchar and getch
1.从缓冲区读走一个字符,相当于清除缓冲区2.前面的scanf()在读取输入时会在缓冲区中留下一个字符'\n'(输入完s[i]的值后按回车键所致),所以如果不在此加一个getchar()把这个回车符取走的话,gets()就不会等待从键盘键入字符,而是会直接取走这个“无用的”回车符,从而导致读取有误3.getchar()是在输入缓冲区顺序读入一个字符(包括空格、回车和Tab)getcha转载 2015-08-24 22:25:35 · 515 阅读 · 0 评论 -
C Macro UG
/** set a bit in bit32. loc from 0~31 */#define BIT_SET(bit32, loc) ((bit32) |= (0x1 /** clear a bit in bit32. loc from 0~31 */#define BIT_CLEAR(bit32,loc) ((bit32) &= ~(0x1 /**原创 2015-09-15 14:39:56 · 679 阅读 · 0 评论 -
C 左移 右移 opration
先说左移,左移就是把一个数的所有位都向左移动若干位,在C中用int i = 1;i = i 也就是说,1的2进制是000...0001(这里1前面0的个数和int的位数有关,32位机器,gcc里有31个0),左移2位之后变成 000...0100,也就是10进制的4,所以说左移1位相当于乘以2,那么左移n位就是乘以2的n次方了(有符号数不完全适用,因为左移有可能导致符号变化,下转载 2015-09-15 14:33:46 · 817 阅读 · 1 评论 -
c big endian OR little endian
【大端(Big Endian)与小端(Little Endian)简介】Byte Endian是指字节在内存中的组织,所以也称它为Byte Ordering,或Byte Order。 对于数据中跨越多个字节的对象, 我们必须为它建立这样的约定:(1) 它的地址是多少?(2) 它的字节在内存中是如何组织的? 针对第一个问题,有这样的解释: 对转载 2014-10-11 10:33:03 · 449 阅读 · 0 评论 -
strcpy()函数经典实现
C语言标准库函数strcpy,把从src地址开始且含有NULL结束符的字符串复制到以dest开始的地址空间原型声明:extern char *strcpy(char* dest, const char *src);头文件:#include string.h>/********************** * C语言标准库函数strcpy的一种典型的工业级的最简实现 * 返回转载 2014-02-26 10:01:40 · 715 阅读 · 0 评论 -
sizeof()和 strlen()函数
一、sizeof sizeof(...)是运算符,而不是一个函数。 一个简单的例子:int a;cout 在头文件中typedef为unsigned int,其值在编译时即计算好了,参数可以是数组、指针、类型、对象、函数等。 它的功能是:获得保证能容纳实现所建立的最大对象的字节大小。 由于在编译时计算,因此sizeof不能用来返回动态分配的转载 2014-02-25 18:06:18 · 548 阅读 · 0 评论 -
fgets()和fputs()函数
fgets从指定的文件中读一行字符到调用者提供的缓冲区中,gets从标准输入读一行字符到调用者提供的缓冲区中。#include char *fgets(char *s, int size, FILE *stream);char *gets(char *s);返回值:成功时s指向哪返回的指针就指向哪,出错或者读到文件末尾时返回NULLgets函数无需解释,Man Page的BUGS部转载 2014-02-25 18:10:18 · 750 阅读 · 0 评论 -
父进程与子进程 wait, WIFEXITED, WEXITSTATUS 函数
wait()的函数原型是:#include #include pid_t wait(int *status)进程一旦调用了wait,就立即阻塞自己,由wait自动分析是否当前进程的某个子进程已经退出。如果让它找到了这样一个已经变成僵尸的子进程,wait就会收集这个子进程的信息,并把它彻底销毁后返回;如果没有找到这样一个子进程,wait就会一直阻塞在这里,直到有一个出现转载 2014-02-27 14:45:08 · 941 阅读 · 0 评论 -
exit,_exit.atexit,return,strerror 函数
1、exit函数和return函数的主要区别是:1)exit用于在程序运行的过程中随时结束程序,其参数是返回给OS的。也可以这么讲:exit函数是退出应用程序,并将应用程序的一个状态返回给OS,这个状态标识了应用程序的一些运行信息。main函数结束时也会隐式地调用exit函数,exit函数运行时首先会执行由atexit()函数登记的函数,然后会做一些自身的清理工作,同时刷新所有输出转载 2014-02-27 15:32:37 · 684 阅读 · 0 评论 -
extern 与 static 用法总结
资料11、 概念基础:局部变量:函数内部定义的变量(包括定义在函数内部复合语句中的变量)。全局变量:定义在函数外部的变量。作用域:任何标识符(包括变量、函数名、符号常量及新的数据名)都有它的作用范围,此范围称为该标识符的作用域。比如符号常量的作用域是从定义符号 常量的地方开始到包含这个#define命令(作用于该符号常量)的文件末尾或者遇到#undef命令(作用于转载 2014-02-17 09:43:14 · 594 阅读 · 0 评论 -
linux perror()函数
头文件: #include perror是包含在这个文件里;函数定义: void perror(const char *s); 函数说明 perror ( )用 来 将 上 一 个 函 数 发生 错 误 的 原 因 输 出 到 标 准 设备 (stderr) 。参数 s 所指的字符串会先打印出,后面再加上出错原因字符串。此错误原因依照全局变量err原创 2014-02-27 16:21:45 · 4251 阅读 · 0 评论 -
数组下标为-1的意义
数组下标为-1的地址对于数组来说是越界访问了,但是这个地址是有意义的这个地址就是所申请的数组存储空间的首地址的向前偏移一个单位(也就是偏移一个当前数组类型所对应的字节数)所对应的地址。这个地址由于没有跟着数组空间一起初始化,所以其中的数据是不一定的,如果是正在被系统或者其他APP使用中的地址空间,那么可以被访问,其中的数据的意义取决于被系统或者其他APP所写入的数据,但是访问后转载 2014-03-12 09:53:24 · 4731 阅读 · 0 评论 -
文件检测函数 ferror feof
文件检测函数 C语言中常用的文件检测函数有以下几个。 一、文件结束检测函数feof函数调用格式: feof(文件指针); 功能:判断文件是否处于文件结束位置,如文件结束,则返回值为1,否则为0。 二、读写文件出错检测函数ferror函数调用格式: ferror(文件指针); 功能:检查文件在用各种输入输出函数进行读写时是否出错。 如ferror返回值为0表示未出错,否则转载 2014-03-12 09:16:38 · 1369 阅读 · 0 评论 -
内存分配方式
内存分配方式有三种:(1) 从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static 变量。(2) 在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。(3) 从堆上分配,亦称动态内存分配。程序在运转载 2014-10-22 20:29:46 · 490 阅读 · 0 评论 -
write 操作文件注意事项
多线程同时写文件可能存在的问题:1.文件被另一个线程占用,fd不可写,导致write失败;2.write 拷贝大量数据到文件时,一次操作不能全部写入,需要循环检测,重复写入才能保证数据完整性。/* record the tty information */typedef struct LocoTty_s{ U32 tid; /**< the tty原创 2015-12-06 15:33:58 · 1271 阅读 · 0 评论