编程语言|2020-08-18

1、size_t
size_t在C语言中就有了
它是一种“整型”类型,里面保存的是一个整数,就像int, long那样。这种整数用来记录一个大小(size)。size_t的全称应该是size type,就是说“一种用来记录大小的数据类型”。
通常我们用sizeof(XXX)操作,这个操作所得到的结果就是size_t类型。
因为size_t类型的数据其实是保存了一个整数,所以它也可以做加减乘除,也可以转化为int并赋值给int类型的变量。
2、atoi()函数
C 库函数 int atoi(const char *str) 把参数 str 所指向的字符串转换为一个整数(类型为 int 型)
函数原型:int atoi(const char *str);
头文件:#include

//以下程序输出结果为 1 #define _CRT_SECURE_NO_WARNINGS #include #include int main() { char a[] = "-100"; char b[] = "101"; int c; c = atoi(a) + atoi(b); printf("c = %d\n", c); return 0; }

3、eof
在C语言中,或更精确地说成C标准函式库中表示文件结束符(end of file)。在while循环中以EOF作为文件结束标志,这种以EOF作为文件结束标志的文件,必须是文本文件。在文本文件中,数据都是以字符的ASCII代码值的形式存放。我们知道,ASCII代码值的范围是0~255,不可能出现-1,因此可以用EOF作为文件结束标志。
4、fgets ()函数

# include
char *gets(char *str);
gets() 函数的功能是从输入缓冲区中读取一个字符串存储到字符指针变量 str 所指向的内存空间。
虽然用 gets() 时有空格也可以直接输入,但是 gets() 有一个非常大的缺陷,即它不检查预留存储区是否能够容纳实际输入的数据;
# include int main(void) { char str[20] = "\0"; //字符数组初始化\0 printf("请输入字符串:"); gets(str); printf("%s\n", str); return 0; }

输出结果是:
请输入字符串:i love you
i love you
gets(str); scanf("%s", string);

可见,gets() 函数不仅比 scanf 简洁,而且,就算输入的字符串中有空格也可以直接输入,不用像 scanf 那样要定义多个字符数组;关于使用 gets() 函数需要注意:使用 gets() 时,系统会将最后“敲”的换行符从缓冲区中取出来,然后丢弃,所以缓冲区中不会遗留换行符。
char *fgets(char *s, int size, FILE *stream);
fgets() 虽然比 gets() 安全,但安全是要付出代价的,代价就是它的使用比 gets() 要麻烦一点,有三个参数。它的功能是从 stream 流中读取 size 个字符存储到字符指针变量 s 所指向的内存空间。它的返回值是一个指针,指向字符串中第一个字符的地址。
fgets (buf, size, fp) 其方式如下:
(1)遇到换行或文件结束EOF则返回。
(2)按行读取。
(3)每一行结束处的换行字符‘\n’也算该行字符。
(4)对于大小为size的buf,最多只读取size-1个字符。
(5)自动地把buf中最后一个字符(通常是换行符)的后面一个字节填充零结束符('\0')。
5、strlen()函数
strlen(char*)函数求的是字符串的实际长度,它求得方法是从开始到遇到第一个'\0',如果你只定义没有给它赋初值,这个结果是不定的,它会从aa首地址一直找下去,直到遇到'\0'停止。
char aa[10]; cout< char aa[10]={'\0'}; cout< char aa[10]="jun"; cout< 而sizeof()返回的是变量声明后所占的内存数,此外sizeof不是函数,仅仅是一个操作符,strlen是函数。
sizeof(aa) 返回10
int a[10]; sizeof(a) 返回40 (根据语言int型 c 是两个字节 c++是四个 java 是两个)
6、feof()函数
功能:检测流上的文件结束符;
int feof(FILE *stream);
feof(fp)有两个返回值:如果遇到文件结束,函数feof(fp)的值为非零值,否则为0。
7、realloc()函数
realloc原型是:extern void *realloc(void *mem_address, unsigned int newsize);
指针名=(数据类型*)realloc(要改变内存大小的指针名,新的大小)。
新的大小可大可小(但是要注意,如果新的大小小于原内存大小,可能会导致数据丢失,慎用!)
头文件:#include有些编译器需要#include ,在TC2.0中可以使用alloc.h头文件
功能:先判断当前的指针是否有足够的连续空间,如果有,扩大mem_address指向的地址,并且将mem_address返回,如果空间不够,先按照newsize指定的大小分配空间,将原有数据从头到尾拷贝到新分配的内存区域,而后释放原来mem_address所指内存区域(注意:原来指针是自动释放,不需要使用free),同时返回新分配的内存区域的首地址。即重新分配存储器块的地址。
  1. 如果有足够空间用于扩大mem_address指向的内存块,则分配额外内存,并返回mem_address。
    这里说的是“扩大”,我们知道,realloc是从堆上分配内存的,当扩大一块内存空间时, realloc()试图直接从堆上现存的数据后面的那些字节中获得附加的字节,如果能够满足,自然天下太平。也就是说,如果原先的内存大小后面还有足够的空闲空间用来分配,加上原来的空间大小= newsize。那么就ok。得到的是一块连续的内存。
  2. 如果原先的内存大小后面没有足够的空闲空间用来分配,那么从堆中另外找一块newsize大小的内存。
    并把原来大小内存空间中的内容复制到newsize中。返回新的mem_address指针。(数据被移动了)。
    老块被放回堆上。

【编程语言|2020-08-18】返回值:如果重新分配成功则返回指向被分配内存的指针,否则返回空指针NULL。
返回情况:
返回的是一个void类型的指针:调用成功。(这就要求在你需要的时候进行强制类型转换)
返回NULL:当需要扩展的大小(第二个参数)为0并且第一个参数不为NULL时。此时原内存变成“free(游离)”的了。
返回NULL:当没有足够的空间可供扩展的时候。此时,原内存空间的大小维持不变。

注意:当内存不再使用时,应使用free()函数将内存块释放。
8、指针等于0,什么意思?
char* p=0;
它等同于char* p=NULL;
但是最好用0,因为NULL是定义在#include的头文件中
#define NULL 0;
所以你如果在编写函数时,没有用头文件iostream时,直接引用char* p=NULL;
时会出错,而用char* p=0; 则正确。
9、exit()函数
exit为C++的退出函数,声明于stdlib.h中,对于C++其标准的头文件为cstdlib,声明为
void exit(int value);
exit的功能为,退出当前运行的程序,并将参数value返回给主调进程。
在main中return v; 的效果 与exit(v); 相同。
exit(1)和exit(-1):是分别返回1和-1到主调程序。
exit(1):非正常运行导致退出程序;
exit(-1):非正常运行导致退出程序,与1类似。
在main中return v; 的效果与exit(v); 相同。
exit(0)则是返回0。
exit(0)表示程序正常退出,非0表示非正常退出
10、calloc()函数
C 库函数 void *calloc(size_t nitems, size_t size) 分配所需的内存空间,并返回一个指向它的指针。malloc 和 calloc 之间的不同点是,malloc 不会设置内存为零,而 calloc 会设置分配的内存为零。
参数:
  • nitems -- 要被分配的元素个数。
  • size -- 元素的大小。
返回值:
该函数返回一个指针,指向已分配的内存。如果请求失败,则返回 NULL。
11、opencv的imread函数
函数原型是:cv2.imread(filename, flage)
其中,第二个参数说明如下:
cv2.IMREAD_COLOR : 默认使用该种标识。加载一张彩色图片,忽视它的透明度。
cv2.IMREAD_GRAYSCALE : 加载一张灰度图。
cv2.IMREAD_UNCHANGED : 加载图像,包括它的Alpha通道
同时,上面三个参数可以分别用1,0,-1代替。
12、assert宏
assert宏的原型定义在中,其作用是如果它的条件返回错误,则终止程序执行,原型定义:
#include void assert( int expression );

assert的作用是现计算表达式 expression ,如果其值为假(即为0),那么它先向stderr打印一条出错信息,然后通过调用 abort 来终止程序运行。
13、strchr 函数
char *strchr(const char *s, int c);

strchr 函数在字符串 s 中从前到后(或者称为从左到右)查找字符 c,找到字符 c 第一次出现的位置就返回,返回值指向这个位置,如果找不到字符 c 就返回 NULL。
14、二值化
图像的二值化是将图像上的像素点的灰度值设置为0或255,也就是将整个图像呈现出明显的黑白效果。

将256个亮度等级的灰度图像通过适当的阀值选取而获得仍然可以反映图像整体和局部特征的二值化图像。在数字图像处理中,二值图像占有非常重要的地位,首先,图像的二值化有利于图像的进一步处理,使图像变得简单,而且数据量减小,能凸显出感兴趣的目标的轮廓。其次,要进行二值图像的处理与分析,首先要把灰度图像二值化,得到二值化图像。
所有灰度大于或等于阀值的像素被判定为属于特定物体,其灰度值为255表示,否则这些像素点被排除在物体区域以外,灰度值为0,表示背景或者例外的物体区域

    推荐阅读