C
小咸鱼_
这个作者很懒,什么都没留下…
展开
-
Windows下C获取文件夹下所有文件名
#include #include #define IMGNUM 20000 //图片所在文件夹中图片的最大数量 char img_files[IMGNUM][1000]; int getFiles(char *path) { int num_of_img = 0; long hFile = 0; struct _finddata_t fileinfo; char p[700] =原创 2016-11-15 22:06:48 · 5164 阅读 · 0 评论 -
指针的*和++(--)同时出现的一些情形
int a[2] = { 1, 10 }; int *p = &a[0]; 如果有下面的操作: *++p *p++ ++*p ++*++p 那么它的结果是怎样?如何理解? 如果*和++均在左边,则是从右向左结合的: *++p : 先对指针p向前移动1,然后*取该处的值 ++*p :先取p所指的值,然后对该值+1 ++*++p :先对指针p向前移动1,取该处的值,然原创 2017-05-25 16:45:43 · 822 阅读 · 0 评论 -
一个奇怪的数组访问方式
定义一个数组如下: int array[] = { 1, 2, 3 }; 如果我们要访问第三个元素,很简单: array[2]即可。 也可以这样: *(array+2) 因为数组名是指针常量,所以是合法的。 但是,如果这样呢? 2[array] 结果是什么? 答案是:数组的第三个元素,即: array[2]、*(array+2)和2[array]是同样的。原创 2017-05-25 20:34:18 · 369 阅读 · 0 评论 -
数组元素的访问方式—指针与下标
数组元素的访问方式—指针与下标 《c和指针》中有一句话:下标绝对不会比指针更有效率,但指针有时会比下标更有效率! 在解释这句话之前说上一句自己的想法:效率很重要,但是不能仅仅为了提高点效率而牺牲某些比较重要的优势,比如可读性,很显然,在数组访问时,使用下标的的访问方式比指针的可读性更强,而有时指针正是程序错误的根源! 下面解释下这句话: 下面的例子中将数组中的所有元素都转载 2017-05-25 21:15:13 · 3192 阅读 · 0 评论 -
关于strncpy这个函数
1.不考虑内存重叠的strncpy 网上很多博客也写了这个函数,面试也常常会遇到,但是,我发现网上的很多代码都是有问题的,我们先看下大部分网上博客的实现: char *strncpy(char *dst, const char *src, size_t len) { assert(dst != NULL && src != NULL); char *res = dst; while (l原创 2017-05-27 10:07:51 · 30516 阅读 · 1 评论 -
动态内存分配
1.malloc void *malloc(size_t size)malloc的参数就是要分配的字节数,如果内存池中可用的内存满足这个条件,malloc就返回一个指向被分配的内存块起始位置指针。 malloc分配的是一块连续的内存,如果内存池是空的,或者它的内存无法满足要求,malloc就返回一个NULL指针。因此,对malloc返回值就行NULL检查是必要的。 2.cal原创 2017-05-31 10:00:35 · 357 阅读 · 0 评论 -
给定一个集合,输出它的所有子集
题目:集合是由大字字母(A-Z)组成的,要求输出集合的所有子集,每个子集一行,不能使用递归。 例如 “ABD”的子集: NULL(空集)、A、B、C、AB、AC、BC、ABC(共8个) 这个题可以用位图的思想做。 比如集合{A,B} 对应位向量v=000...00011(26维) 那么A表示1,B表示2,[0,3]循环(3是B在字母表的位置2+1计算得): 0 & v原创 2017-06-05 14:51:01 · 5439 阅读 · 1 评论 -
断言assert
断言就是声明某种东西应该为真。 assert的原型如下: void assert(int expression) 当它被执行时,就对表达式进行测试,如果为假,则向标准错误打印一条诊断信息并终止程序。如果为真则继续执行程序。 断言使得调试程序变得容易,当程序调试完毕后,我们可以在编译时通过定义NDEBUG消除所有的断言。可以使用-DNDEBUG编译器命令行选项或者在源文件中头文件as原创 2017-05-31 21:53:29 · 1364 阅读 · 0 评论 -
<编程之法>1.1 字符串旋转
题目: 给定一个字符串,左旋转m个字符,输出旋转后的字符串。 例如 “abcdef” 左旋转3个字符后成为 “defabc” 解决办法:三步反转 将“abcdef”看成两部分 X=“abc” Y=“def” 先对X反转,再对Y反转,然后整体反转。 代码: void reverseString(char *s, int bg, int ed) { while (bg <原创 2017-06-13 19:55:03 · 1568 阅读 · 0 评论