C/C++函数知识
文章平均质量分 55
仙女阳
希望多学习
展开
-
对数函数的C、MATLAB表示
1、C语言中的对数函数 头文件:#include 格式: ①double log (double x); log() 函数返回以 e 为底的对数值,即数学中的lnx; 如果 x 为负数或 0,则会发生错误并设置 errno 值。 错误代码:EDOM:参数x 为负数;ERANGE:参数x 为零值,零的对数值无定义。原创 2017-12-15 10:41:43 · 6209 阅读 · 0 评论 -
C如何将二维数组作为返回值
做大作业遇到这样一个问题:在子函数里申请了一个二维数组,在主函数里要用到二维数组里的数据,但是在主函数里又不能提前申请(因为不知道数组长度),所以需要将数组return得到。 子函数:float ** SURFCompare(Mat srcImage1, Mat srcImage2)//注意子函数返回值为float **{ ... float **point;//定义二维指针原创 2018-01-08 18:47:15 · 15384 阅读 · 1 评论 -
C定义全局变量
程序工程中往往遇到这样的问题:某个变量是贯穿始终的,主函数以及不同的子函数都要用到这个变量,并且要调用子函数改变变量的值。这时候全局变量就起到一个桥梁作用,在函数外定义,在主函数中调用定义,在子函数A中调用并赋值,在子函数B中调用该变量,此时的值已经是改变之后的值。 用法:在主函数之前定义全局变量(不包含在任何变量里)int pointnum;//全局变量,匹配点对个数 在主函数mai原创 2018-01-08 19:22:49 · 40620 阅读 · 3 评论 -
头文件的写法
#ifndef SURF_FUNC_H_//大写,防止头文件被多次包含,防止与自带的头文件重复#define SURF_FUNC_H_float** SURFCompare(Mat srcImage1, Mat srcImage2, float paraHessian);#endif 1.只需要将函数声明、宏定义、结构声明等内容写入。 2.头文件可以定义很多宏定义,以及一原创 2018-01-09 11:27:04 · 966 阅读 · 0 评论 -
用数组存储循环序号的数据
一个i(i 一维存储方法(类似于opencv存储彩图的顺序) for (int i = 0; i < viewMatches.size(); i++)//将匹配的特征点坐标赋给point,给数组赋值 { index1 = viewMatches.at(i).queryIdx; index2 = viewMatches.at(i).trainIdx; poi原创 2018-01-09 11:31:45 · 920 阅读 · 0 评论 -
C语言结构体数组的使用
1、结构体数组的优点 结构体可以存储不同的数据类型,将他们互相联系起来。结构体数组可以连续存储多个结构体,和数组作用相似。比如想定义同一个最小外接矩形的四个坐标值,并给予这个矩形一个特征编号。当需要存储多个最小外接矩形的信息时,就需要动态申请一个结构体数组。2、结构体数组的定义和使用 以某一个需求为例,给出了结构体数组的定义、初始化、用户交互使用、释放。struct rect /...原创 2018-04-19 17:00:45 · 12517 阅读 · 0 评论 -
C、C++申请指针内存的问题
关于指针的血和泪的教训1、指针申请时一定要检查是否申请成功,当项目比较庞大时,内存有可能申请不成功导致程序中断,而这时候往往无从知道哪里出现了问题。如下: double* wid = (double*)malloc((num+1) *sizeof(double));//存储每个矩形的宽 if (wid == NULL) { cout << "Fail to allocate m...原创 2018-04-20 10:35:33 · 836 阅读 · 0 评论 -
memset()函数详解
1、头文件 C中为<memory.h> 或 <string.h> C++中为<cstring>2、原型及作用void *memset(void *s,int c,size_t n) 其中,s是一个指针或数组,c是赋给s的值,n是将修改的s的长度,即s的前n个字节。 作用:将已开辟内存空间 s 的首 n 个字节的值设为值 c。3、常用 ...原创 2018-04-24 15:30:11 · 797 阅读 · 0 评论 -
子函数的指针释放问题
C语言中遇到一个这样的问题:子函数中malloc了一个指针存储数据,作为该子函数的返回值,return到主函数。 那么这个指针应该在哪里释放呢? 显然不能在子函数里释放,否则返回值没有意义。这样就应该在主函数里释放,主函数里申请一个指针,指向这个返回值,使用之后释放。 更好的做法:在主函数里申请一段内存空间,初始化为0,传入子函数中对数据进行修改,不设返回值。该指...原创 2018-04-24 15:38:26 · 3819 阅读 · 1 评论 -
C++ vector的释放
项目上用到vector容器,没有手动释放,总是会在这里出现内存分配不成功的问题,因此对vector的释放了解了一下。 初始代码如下:vector <float*> dets(nTotalLayers); //dets : 记录每层图像的 Hessian 行列式;for (int octave = 0; octave < nOctaves; octave++) {...原创 2018-04-24 16:10:09 · 25578 阅读 · 0 评论 -
内存结构 堆 栈 全局区 常量区 代码区
转载:https://blog.csdn.net/levy1021/article/details/45419381转载 2019-04-15 09:59:17 · 375 阅读 · 0 评论 -
C++文件交互(txt、excel)
前些天完成了计算机视觉大作业,《基于双目立体视觉的深度图像生成》,虽然刚开始觉得作业很难,也没找到现成的程序,但做到最后还是学到很多知识,get到很多技能,现在一一总结下来。 1、C++输出数据到txt 包含头文件:#include //文件交互 开头程序:ofstream outf;//这里如果定义outfile 下面都用outfileoutf.open("result.原创 2018-01-08 15:30:35 · 3603 阅读 · 2 评论 -
常用的位运算
1、按位与 & 0 & 0 = 0;0 & 1 = 0;1 & 0 = 0;1& 1 = 1 同时为1则结果为1,否则为0; 如3 & 8 3 = 00000011 5 = 00000101 结果为 000000012、按位或 || 0|0=0; 0|1=1; 1|0=1; 1|1=1;原创 2018-01-15 16:51:43 · 245 阅读 · 0 评论 -
高斯卷积核如何生成 C语言实现
对于学图像专业的人来说,对图像进行高斯滤波应该不会陌生,本质上就是将图像与高斯核进行卷积。但是高斯核是如何生成的呢。matlab中有函数能自动生成高斯卷积核: gs=fspecial('gaussian',3,1) gs = 0.0751 0.1238 0.0751 0.1238 0.2042 0.1238转载 2017-12-07 20:30:37 · 1945 阅读 · 0 评论 -
C语言pow()函数:求x的y次方(次幂)
1、头文件:#include2、原型: double pow(double x, double y); pow() 函数用来求 x 的 y 次幂(次方) pow()用来计算以x 为底的 y 次方值,然后将结果返回。设返回值为 ret,则 ret = xy。3、可能导致错误的情况:如果底数 x 为负数并且指数 y 不是整数,将会导致 doma原创 2017-12-07 20:26:49 · 28041 阅读 · 1 评论 -
C语言的格式控制符问题
写C程序遇到这样一个问题,定义了double变量,printf输出却要%f。一直以为应该用%lf,事实上VC++6.0用%lf会报错。原因还要在探究。 贴吧有人说:double变量,scanf时必须用%lf,printf时要用%f或者%lf(但是我用%lf运行出错,不明原因)。测试程序如下:#include#includeint main(void){原创 2017-12-07 20:27:47 · 533 阅读 · 0 评论 -
C语言读取txt文档中的数据
1.说明 txt文档中的数据格式:前后数据用空格隔开; 数据来源:matlab读取彩图的R、G、B三层的像素值,分别存放在三个txt文档中,用C读取到一维数组。 动态申请数组,还是需要预先知道数组的大小,比静态好的地方是可以释放内存。2.源程序#include#includeint main(void){ int原创 2017-12-07 20:34:34 · 3984 阅读 · 0 评论 -
malloc申请一维动态数组的错误
正确写法: int *tmp = ( int * )malloc( H*W*sizeof(int) ); float *tmp = ( float * )malloc( H*W*sizeof(float) ); double *tmp = ( double * )malloc( H*W*sizeof(double) ); 错误写法: double ...原创 2017-12-07 20:35:31 · 779 阅读 · 0 评论 -
C语言动态数组建立方法
动态数组是指在声明时没有确定数组大小的数组,即忽略圆括号中的下标;当要用它时,可随时用ReDim语句(C语言中用malloc语句)重新指出数组的大小。使用动态数组的优点是可以根据用户需要,有效利用存储空间。 动态数组,是相对于静态数组而言。静态数组的长度是预先定义好的,在整个程序中,一旦给定大小后就无法改变。而动态数组则不然,它可以随程序需要而重新指定大小。动态数组的转载 2017-12-07 20:37:28 · 4335 阅读 · 0 评论 -
如何使一维数组一行一行的输出成二维数组的格式
以9个元素的数组为例,输出3x3的格式 基本思想是对每一个元素的index进行检查,当index是3,6,9等可以被3整除的数时,在打印它们之前,先打印一个'\n'。注意0也可以被3整除,但是此时不打印'\n',所以要加上i>0的判断。程序如下:for (i = 0; i<9; i++) { if (i>0 && i % 3 == 0) printf("\n")原创 2018-01-01 15:48:59 · 3616 阅读 · 0 评论 -
让程序结果在屏幕上暂停一段时间
现在使用的VS2013用printf输出结果,总是一闪而过。为了让结果停留一段时间,可以有以下解决办法:1.调用系统命令暂停#include system("pause");2.#includegetchar();3.#includegetchar();原创 2017-12-15 11:07:47 · 3334 阅读 · 1 评论 -
实现两个数的交换(异或,加减)
1、 通常我们通过设置临时变量来实现两个数的交换,如下: void swap(int *a,int *b) { int temp; temp=*a; *a=*b; *b=temp; }2、还可以通过异或来实现两个不同整数的交换,如下: void swap(int &a,int &b) { temp=a^b; //原创 2018-01-13 20:16:56 · 4414 阅读 · 0 评论 -
VS2017无法启动
新安装了VS2017,安装没问题,但是总出现启动时没反应的状况,鼠标双击后转圈,然后就没然后了。。解决办法:第一步:开始-->所有程序-->Microsoft Visual Studio 2017文件夹-->VisualStudio Tools-->VS2017开发人员命令提示(以管理员方式运行)第二步:输入devenv/Safemode即可打开。...原创 2019-06-02 18:51:40 · 5593 阅读 · 5 评论