c语言
xiaoshengqdlg
这个作者很懒,什么都没留下…
展开
-
关于宏的特殊用法
最近研究安卓源码 发现了很多宏的特殊用法 记录下来以便日后巩固复习。1、特殊符号 #带有#的参数会被量化成字符数组,也就是在替换的时候给其两端加上" "。例如:#define STR(x) #x STR(a)将被替换成 "a"2、特殊符号 ##“##”是一种分隔连接方式,它的作用是将宏参数替换后,然后再将##两边的参数连接进行强制连接。例如:在普通的宏定义中,预处转载 2013-12-26 10:41:52 · 918 阅读 · 0 评论 -
关于字符串指针
1、#include int main(){char *p = "1edr";printf("p = %s\n",p);if(*p == '1') printf("*p = '1'\n");return 1;}运行结果:p = 1edr*p = '1'指针的本质就是一个存储地址的变量,它存储的一定是地址, char *p =原创 2015-02-05 10:09:49 · 510 阅读 · 0 评论 -
可执行文件的装载与执行
《程序员的自我修养》第六章 P157原创 2015-02-05 15:44:26 · 370 阅读 · 0 评论 -
c语言中#include 路径查找问题
在程序设计中,文件包含是很有用的。一个大的程序可以分为多个模块,由多个程序员分别编程。有 些公 用的符号常量或宏定义等可单独组成一个文件,在其它文件的开头用包含命令包含该文件即可使 用。这样,可避免在每个文件开头都去书写那些公用量,从而节省时间,并减少出错。对文件包含命令还要说明以下几点:1. 包含命令中的文件名可以用双引号括起来,也可以用尖括号括起来转载 2014-11-01 15:25:24 · 35522 阅读 · 1 评论 -
ASCII(美国信息交换标准编码)表
ASCII(美国信息交换标准编码)表字符ASCII代码字符ASCII代码字符ASCII代码二进制十进制十六进制二进制十进制十六进制二进制十进制十六进制回车ESC空格!"#$转载 2015-03-27 14:28:30 · 9772 阅读 · 0 评论 -
gcc加载静态库与动态库
//hello.c#include void print_hello(){ printf("HelloWorld ");}//main.c#include#include "hello.h"int main(){ print_hello(); printf("%d",HELLO); return 0;}//hello.h#define HELL转载 2015-02-02 15:58:55 · 730 阅读 · 0 评论 -
C语言函数sscanf()的用法
在我的学习过程中,从文件读取数据是一件很麻烦的事,所幸有sscanf()函数。 C语言函数sscanf()的用法sscanf() - 从一个字符串中读进与指定格式相符的数据. 函数原型: int sscanf( string str, string fmt, mixed var1, mixed var2 ... ); int scanf( const c转载 2014-04-22 14:32:08 · 438 阅读 · 0 评论 -
C语言--main(int argc char**argv)具体用法
argc是命令行总的参数个数 argv[]是argc个参数,其中第0个参数是程序的全名,以后的参数 命令行后面跟的用户输入的参数,比如: int main(int argc, char* argv[]) { int i; for (i = 0; icoutcin>>i; return 0; } 执行时敲入 F:\MYDOCU~1\TEMP转载 2014-04-17 16:15:38 · 787 阅读 · 0 评论 -
C语言常用的各种操作字符串的函数
/*字符串长度函数*/ size_t strlen(const char *string); /*不受限制的字符串函数*/ char *strcpy(char *dst, const char *src); char *strcat(char *dst, const char *src); int strcmp(const char *s1,转载 2014-08-18 11:20:42 · 627 阅读 · 0 评论 -
动态链接库的装载过程
《程序员的自我修养》动态链接章动态链接程序运行时地址空间分布: 在可执行文件中有各种符合和函数的地址,这个地址实际上是进程的虚拟地址。.so文件中也有各种符号地址以及装载地址等。但是.so文件中的这个地址是不确定的,即是不固定的。只有在这个so文件被装载时才会解析出一个合理的装载地址,从而装载进物理内存。(这里的装载地址和符号地址实际上都是进程的虚拟地址)。那么问题来了,为原创 2015-04-19 22:45:59 · 3054 阅读 · 1 评论 -
C语言中,为什么字符串可以赋值给字符指针变量
本文是通过几篇转帖的文章整理而成的,内容稍有修改:一、C语言中,为什么字符串可以赋值给字符指针变量char *p,a='5';p=&a; //显然是正确的,p="abcd"; //但为什么也可以这样赋值??问:一直理解不了为什么可以将字串常量赋值给字符指针变量,请各位指点! 答:双引号做了转载 2016-04-23 17:41:28 · 460 阅读 · 0 评论 -
字符串与指针
printf的第二个参数的类型是由第一个参数format决定的。当format为%s时,第二个参数就是一个地址。当format为%d时,第二个参数就是一个int型的变量。1、 字符串的表示形式在C语言中,我们可以用两种方式访问字符串(1) 用字符数组存放一个字符串,然后输出该字符串。main(){ char string[]="I love China!"转载 2015-02-04 19:52:11 · 396 阅读 · 0 评论 -
strtol函数
转自http://hi.baidu.com/qwpsmile/blog/item/9bc44efa4f41018a9f514637.html+----------------+| strtol |+----------------+i.e. string to longlong int strtol(const char *nptr, char *转载 2014-09-29 16:03:02 · 427 阅读 · 0 评论 -
关于字符数字和整形数字 ASCII
int main(){ char i = 2; printf("i == %d",i); return 1;}输出结果是:i == 2原创 2014-04-22 13:25:47 · 828 阅读 · 0 评论 -
关于字符数字和整形数字
关于字符数字和整形数字int main(){ char i = '2'; printf("i == %c",i); return 1;}输出结果为:i原创 2014-04-22 13:32:29 · 728 阅读 · 0 评论 -
#ifdef #ifndef #define,#endif解析
我们在看一些开源的源代码的时候,经常会看到如下情景:# if defined(_PTHREADS) && !defined(_NOTHREADS)# define __STL_PTHREADS# endif # if defined(_UITHREADS) && !defined(_PTHREADS) && !defined(_NOTHREADS)# def转载 2014-04-23 13:47:19 · 738 阅读 · 0 评论 -
select函数用法
原型int select(int nfds,fd_set* readfds,fd_set* writefds,fd_set* exceptfds,const struct timeval* timeout);nfds:本参数忽略,仅起到兼容作用。 readfds:(可选)指针,指向一组等待可读性检查的套接口。 writefds:(可选)指针,转载 2014-04-24 14:37:19 · 499 阅读 · 0 评论 -
C语言中位域
有些信息在存储时,并不需要占用一个完整的字节, 而只需占几个或一个二进制位。例如在存放一个开关量时,只有0和1 两种状态, 用一位二进位即可。为了节省存储空间,并使处理简便,C语言又提供了一种数据结构,称为“位域”或“位段”。所谓“位域”是把一个字节中的二进位划分为几个不同的区域,并说明每个区域的位数。每个域有一个域名,允许在程序中按域名进行操作。这样就可以把几个不同的对象用一个字节的二进制位域来转载 2014-07-04 14:48:44 · 343 阅读 · 0 评论 -
应用层log函数的写法
int my_log(const char *format,...){ va_list args; FILE *fp; fp = fopen("/tmp/my_log","a+"); if(!fp) { fprintf(stderr,"fp is NULL\n"); return -1;原创 2014-08-19 11:57:32 · 699 阅读 · 0 评论 -
c语言宏定义和宏函数
要写好C语言,漂亮的宏定义是非常重要的。宏定义可以帮助我们防止出错,提高代码的可移植性和可读性等。 在软件开发过程中,经常有一些常用或者通用的功能或者代码段,这些功能既可以写成函数,也可以封装成为宏定义。那么究竟是用函数好,还是宏定义好?这就要求我们对二者进行合理的取舍。 我们来看一个例子,比较两个数或者表达式大小,首先我们把它写成宏定义: #define MAX(转载 2014-08-11 09:49:29 · 1010 阅读 · 0 评论 -
C语言中不同类型的结构体的指针间可以强制转换
C语言中不同类型的结构体的指针间可以强制转换,很自由,也很危险。只要理解了其内部机制,你会发现C是非常灵活的。一.结构体声明如何内存的分布, 结构体指针声明结构体的首地址, 结构体成员声明该成员在结构体中的偏移地址。 变量的值是以二进制形式存储在内存中的,每个内存字节对应一个内存地址,而内存存储的值本身是没有整型,指针,字符等的区别的,区别的存在转载 2014-04-22 17:34:39 · 2696 阅读 · 0 评论 -
进制转换函数
程序实例:12345678910#include #include intmain(void){ intnumber = 12345; charstring[32]; itoa(转载 2014-07-30 08:56:59 · 533 阅读 · 0 评论 -
写程序笔记
1、宏可以作为函数参数get_value(URI_TR)原创 2014-09-20 16:41:41 · 465 阅读 · 0 评论 -
C语言字符串结束符
'\0'就是8位的00000000,因为字符类型中并没有对应的这个字符,所以这么写。'\0'就是 字符串结束标志。'\0'是转译字符,意思是告诉编译器,这不是字符0,而是空字符。空字符\0对应的二进制为00000000,而数字0为00110000原来,在C语言中没有专门的字符串变量,通常用一个字符数组来存放一个字符串。字符串总是以'\0'作为串的结束符。因此当把一个字符串存入一转载 2016-04-29 10:05:02 · 16618 阅读 · 0 评论