C-C++
FIRE_TRAY
生命在于折腾
展开
-
const 修饰指针的问题
const 修饰指针的问题判断法则沿着*号划一条线:如果const位于*的左侧,则const就是用来修饰指针所指向的变量,即指针指向为常量如果const位于*的右侧,const就是修饰指针本身,即指针本身是常量验证#include <stdio.h>#include <stdlib.h>int main(){ int a = 1; int b = 2; /*const原创 2016-04-07 12:38:51 · 536 阅读 · 0 评论 -
关于指针的小杂碎
关于指针的小杂碎关于指针的一些小点,这里简单整理下间接取值(指针解引用)的含义根据指针找内容的过程被称为:间接取值 或 指针的解引用NULL与0的关系NULL在外部表现为0。为指针赋值NULL,等价于为指针赋予0。用代码验证下:int *p = NULL; printf("%d",p); // 0printf("%d", NULL == 0) // 1但是,就内部实现而言,NULL值可能并非0原创 2016-05-02 16:15:08 · 493 阅读 · 0 评论 -
C strcat
C strcat头文件string.h函数原型char *strcat(char *dst, const char *src);返回的是第一个参数dst的拷贝。用于拼接字符串。注意事项dst的空间约束dst必须有足够的空间保留之前已经有和要拷贝进来的字符串。正确的使用案例:#include<stdlib.h>#include<string.h>#include<stdio.h>char s原创 2016-05-13 09:17:33 · 824 阅读 · 0 评论 -
C strcmp 字符串比较
C strcmp 字符串比较头文件string.h函数原型int strcmp(const char *s1, const char *s2);返回的是一个int。注意事项注意比较的结果是依照字典序确定的:如果 s1 < s2 ,也就是s1的字典序排在s2的前面,返回 -1如果 s1 = s2,也就是两者字典序相同,也就是为同字符串, 返回 0 如果 s1 > s2,也就是s1的字典序排在s原创 2016-05-13 09:38:58 · 1375 阅读 · 0 评论 -
C 可指定长度的字符串函数
C 可指定长度的字符串函数头文件string.h函数原型char *strncpy(char *dst, char const *src, size_t len);char *strncat(char *dst, char const *src, size_t len);int strcmp(const char *s1, const char *s2, size_t len);后面len可指原创 2016-05-13 10:46:55 · 1099 阅读 · 0 评论 -
C strchr strrchr查找一个字符
C strchr strrchr查找一个字符头文件string.h函数原型char *strchr(char const *str, int ch);char *strrchr(char const *str, int ch);注意事项返回值的类型注意返回的不是一个整数index,而是一个指向字符的指针。看代码:int main(){ char *string = "abcde";原创 2016-05-13 11:04:43 · 1152 阅读 · 0 评论 -
C strpbrk 查找任意几个字符
C strpbrk 查找任意几个字符头文件string.h函数原型char *strpbrk(char const *str, char const *group);返回的是字符集合group中任意字符在str中第一次出现的位置(最左面的)。同样,函数返回的是指向此位置字符的指针。注意事项注意匹配的是group中任意一个字符,而且区分大小写。看下代码就明了了:int main(){ cha原创 2016-05-13 11:15:46 · 721 阅读 · 0 评论 -
C 函数值传递和指针传递的效率问题
C 函数值传递和指针传递的效率问题C中有两种传递,值传递和指针(地址)传递。值传递需要把数据的一份拷贝传递入函数形参表,并存储在栈中,函数返回后弹出栈,拷贝被删除。而指针传递则不然。如果形参表是指针,那么函数在执行时会直接去指针指向的地址中获取此数据并操作,而不用直接拷贝。看下这个例子:const int ARRAY_SIZE = 20;typedef struct{ long long原创 2016-05-14 17:02:21 · 2029 阅读 · 0 评论 -
C ADT 的实现
C ADT 的实现C也可实现ADT。主要是利用static关键字。static可将被修饰者的作用域限定到文件中,此文件以外则不可对它进行访问。笔者这里实现了一个简单的链表,可以参考下:NameList.c#include<stdlib.h>#include<stdio.h>static const int MAX_PEOPLE_NUM = 100;static char* data[MAX_PE原创 2016-05-04 16:39:08 · 921 阅读 · 0 评论 -
C 运算符优先级与记忆口诀
运算符详情表优先级运算符名称或含义使用形式结合方向说明1[]数组下标数组名[常量表达式]左到右()圆括号(表达式)/函数名(形参表).成员选择(对象)对象.成员原创 2016-05-01 20:16:21 · 663 阅读 · 0 评论 -
C strlen
C strlen 返回值注意事项基础知识头文件string.h函数原型size_t strlen(char const *string);这个size_t是在头文件stddef.h中定义的,是一个unsigned long类型。注意事项注意它的返回值,是一个无符号整数类型(可能为unsigned int 或者 unsigned long)。下面的代码就会因此产生问题:/** * 两个无符号整型相减原创 2016-05-12 16:01:20 · 713 阅读 · 0 评论 -
C strcpy
C strcpy头文件string.h函数原型char *strcpy(char *dst, const char *src);返回的是第一个参数dst的拷贝。注意事项dst的约束由于 dst 参数将进行修改,所以它必须是一个字符串数组或者一个指向动态分配内存的数组指针,不能是字符串常量,而且必须保证有足够的空间。代码举例:这样是可以的char *src = "***";char strin原创 2016-05-12 16:59:55 · 537 阅读 · 0 评论 -
C枚举类型小结
C枚举类型小结枚举类型定义了一组常量,其本质为整型。下面就以星期为背景,对C中的枚举做一个小结枚举的定义enum WEEK{MON,TUE,WES,THR,FRI};此代码定义了一个名为WEEK的枚举类型,其中有周一到周五的5种不同的常量。这些常量本质上为整型,可以赋值给其他整型变量或者赋值给一个WEEK类型的变量。枚举变量的定义方法如下:enum WEEK var = MON;这里定义了一个WEE原创 2016-04-25 19:15:26 · 970 阅读 · 0 评论 -
C 命名指针的更好习惯
C 命名指针的更好习惯笔者平常这样创建指针变量:int* a;笔者当时认为这样写可以更加简洁明了,一看就明白a是一个指向int的指针变量,也就是一个int*类型的变量。但在近日阅读《Pointers on C》一书中,书中认为这样写更好:int *a;书中举了一个例子来说明两者之间的差别,读者请看:int* a,b,c;乍一看,容易产生这样的错觉,会误以为abc都是指向int的指针。实则不然,这里三原创 2016-04-26 20:04:47 · 1368 阅读 · 0 评论 -
#define和typedef在定义指针类型上的优劣
#define和typedef在定义指针类型上的优劣先说下结论:typedef更佳。下面看看代码分析:typedef char *ptr_to_char;char c = 'A';ptr_to_char var = &c;printf("%c",*var);//A这句代码利用了typedef定义了一个新的类型ptr_to_char,并将其定义为指向字符的指针。在后面可以直接利用此来创建字符指原创 2016-04-26 20:38:45 · 2362 阅读 · 0 评论 -
C 链接属性浅析
C 链接属性浅析链接属性用于处理多个文件中同名标识符是否指向同一实体的问题。C 中有三种链接属性——None,Internal和External。让我们分别看看这三种类型。None:表示该标识符没有其他链接,总是独立的。也就是说这些标识符都会指向独立的、不同的实体Internal:表示在同一文件中声明的标识符都会指向同一实体,而不同文件中声明的同名标识符则会指向其他实体 换言之,它修饰的变量仅原创 2016-04-27 16:42:47 · 773 阅读 · 0 评论 -
C 存储类型摘要
C 存储类型摘要存储变量的三种可能位置常规内存运行时栈寄存器默认存储类型变量的默认存储类型是由其定义的位置决定的:在任何代码块外定义的变量: 类型:static位置:静态内存产生时间:先于程序执行之前生命周期: 伴随程序的整个执行周期默认值:0代码块中定义的变量: 类型:automatic 位置:栈产生时间:在程序执行到该代码块之前生命周期: 等同该代码块周期此外原创 2016-04-28 10:10:53 · 422 阅读 · 0 评论 -
存储类型和static关键字作用小结
存储类型和static关键字作用C中的存储类型分为两种,一种是静态(static),另一种是自动(automatic)。注意代码是不存在存储类型的问题,它们恒存在于静态内存中。这里所谈的存储类型,都是针对变量而言。静态存储将期望值放在可执行程序文件中对应的部分,然后将此文件装入内存。当程序执行时,这些对应的区域中已经存好期望的值了。 动态存储在代码块运行时创建变量,结束后销毁。存储位置于运行时栈。s原创 2016-04-28 11:07:38 · 688 阅读 · 0 评论 -
C 数组基础知识分析
C 数组基础知识分析数组名含义一言以蔽之,数组名就是一个指向比其所在维度低一维的东西的指针。让我们再深入的分析一下一维数组比一维再低一维的就是元素。因此,一维数组名就是一个指向所存元素类型的指针。且其值为首元素地址。如果有 int a[10],那么这个a就是一个指向整型的指针,且指向首元素a[0],且其值等于&a[0]。多维数组比多维再低一维的还是数组。因此,多维数组就是一个指向低一维度的数组的指针原创 2016-05-12 11:22:21 · 590 阅读 · 0 评论 -
C 逗号运算符
C 逗号运算符语法格式exp1, exp2, exp3, ..., expN;执行效果运算符中每个表达式exp(i)都会被计算,且整个逗号表达式的最终结果为最后一个表达式expN的值。代码举例#include <stdio.h>#include <stdlib.h>int main(){ int a = -1; while(a *= -1,a){ printf("原创 2016-05-01 10:14:04 · 942 阅读 · 0 评论 -
C 可变参数的使用
C 可变参数的使用C中的可变参数需要使用 stdarg.h 头文件。此头文件中声明了一个类型va_list和三个函数——va_start、va_arg 和 va_end。让我们先看一个求均值函数的实现,看看C中可变参数是如何使用的。样例代码#include <stdio.h>#include <stdlib.h>#include <stdarg.h>float average(int count原创 2016-05-04 17:52:07 · 658 阅读 · 0 评论