1.指针的用法
1.如何打印指针变量的值?
windows:使用 Visual Studio (Graphical Interface) 编译
2011 | C++11 | 第三个C++标准 |
-
cv::Mat imgDst = convertTo3Channels(imgSrc);
一::在C++中是什么意思
今天又想了一下::在C++中是什么意思;
表示作用域,和所属关系
比如
class A
{
public: int test();
}
int A::test() //表示test是属于A的
{
return 0;
}
类似的还有其他,就不列举了 -------------------- 比如 int a;
void test ()
{
int a = ::a; //用全局变量a,给本地变量a赋值
}
::是运算符中等级最高的,它分为三种: 1)global scope(全局作用域符),用法(::name) 2)class scope(类作用域符),用法(class::name) 3)namespace scope(命名空间作用域符)
============================== -
int main () { int var; int *ptr; int **pptr; var = 3000; // 获取 var 的地址 ptr = &var; // 使用运算符 & 获取 ptr 的地址 pptr = &ptr; // 使用 pptr 获取值 cout << "var 值为 :" << var << endl; cout << "*ptr 值为:" << *ptr << endl; cout << "**pptr 值为:" << **pptr << endl; return 0; }
二 &符号是什么作用?Mat convertTo3Channels(const Mat &binImg)
memcpy函数
功能
memcpy指的是c和c++使用的内存拷贝函数,memcpy函数的功能是从源src所指的内存地址的起始位置开始拷贝n个字节到目标dest所指的内存地址的起始位置中
- ,函数 memcpy() 用来复制内存到另一个位置。
ReleaseFloatArrayElements和DeleteLocalRef之间有什么区别
用完之后别忘了释放
三.typedef代表什么意思?
return detect_MobileNetSSD(tg_handle->net, img, rect);
struct timeval tv;
C++ 日期 & 时间
//计算时间
long getCurrentTime()
{
struct timeval tv;
gettimeofday(&tv, NULL);
return tv.tv_sec * 1000 + tv.tv_usec / 1000;
}
#include <time.h>
// 声明一个结构体类型 Books
struct Books
{
char title[50];
char author[50];
char subject[100];
int book_id;
};
int main( )
{
Books Book1; // 定义结构体类型 Books 的变量 Book1
Books Book2; // 定义结构体类型 Books 的变量 Book2
// Book1 详述
strcpy( Book1.title, "C++ 教程");
strcpy( Book1.author, "Runoob");
strcpy( Book1.subject, "编程语言");
Book1.book_id = 12345;
delete handle;
typedef struct _tongue_handle
{
int magic;
ncnn::Net net;
}
tongue_handle;
TONGUE_HANDLE tongue_init(JNIEnv *env, const char *paramPath, const char *modelPath)
{
int rc = 0;
tongue_handle *handle = new tongue_handle();
基础语法:
定义常量
在 C++ 中,有两种简单的定义常量的方式:
- 使用 #define 预处理器。
- 使用 const 关键字。
存储类定义 C++ 程序中变量/函数的范围(可见性)和生命周期。这些说明符放置在它们所修饰的类型之前。下面列出 C++ 程序中可用的存储类:
- auto
- register
- static
- extern
- mutable
- thread_local (C++11)
typedef 声明
您可以使用 typedef 为一个已有的类型取一个新的名字。下面是使用 typedef 定义一个新类型的语法:
<span style="color:#000000"><span style="color:#333333"><span style="color:#000088">typedef</span><span style="color:#000000"> type newname</span><span style="color:#666600">;</span> </span></span>
typedef void *TONGUE_HANDLE;
用完之后别忘了释放
- 如何把数组转为数组指针?
jbyte *yuv = env->GetByteArrayElements(yuvData, 0);
基本的语法:如何判断一个指针是否为null?if(bgr.data==NULL){ return -1; }
如何校验一个对象为null?C++语言中,对象没有空和不空的概念,只有对象指针才有空和不空的概念
判抄断对象指针是否为空袭只需要和NULL常量进行比较即可
如果相等,则为空,否则不为空
另外对象虽然没有空和不空的概念bai,但是有有效和无效的概念const关键字:C++ const 允许指定一个语义约束,编译器会强制实施这个约束,允许程序员告诉编译器某值是保持不变的。如果在编程中确实有某个值保持不变,就应该明确使用const相当于java里面的final修饰内容:修饰指针:C++ 字符(char)指针
char 指针可以看作是字符串, 比如说:
const char *str="HelloWorld!";
本人极不建议使用 char 指针,毕竟 std::string 可以完全替代其并且功能也比它强大,使用使用更加方便如何升级:把头文件和.a文件都升级找到substract_mean_normalize的实现类 - 问题:如何知道你的语言是c?还是c++
- 开发大全
- https://blog.csdn.net/afei__/article/details/81290711
const char *paramPathC = env->GetStringUTFChars(paramPath, NULL);
const char *modelPathC = env->GetStringUTFChars(modelPath, NULL);
const char* GetStringUTFChars(jstring string, jboolean* isCopy)
{ return functions->GetStringUTFChars(this, string, isCopy); }
<span style="color:#000000"><span style="color:#333333"><span style="color:#000088">char</span><span style="color:#000000"> greeting</span><span style="color:#666600">[]</span> <span style="color:#666600">=</span> <span style="color:#008800">"Hello"</span><span style="color:#666600">;</span></span></span>
C++ 中的 String 类
int rc = 0;
tongue_handle *handle = new tongue_handle();
// if(NULL == handle)
// return NULL;
// rc = handle->net.load_param("./models/tongue_5classes_singlechannel.param");
rc = handle->net.load_param(paramPath);//
//��ȡ.param����ȡ�ɹ�ʱrc=0 ,�xȡ.h ��ȡ�ɹ�ʱrc!=0
if(rc != 0)
{
//"load_person_param error"
__android_log_print(ANDROID_LOG_DEBUG, "james", "load_person_param error :%d",rc);
delete handle;
return NULL;
}
typedef struct _tongue_handle
{
int magic;
ncnn::Net net;
} tongue_handle;
#ifndef __TONGUE_H__
#define __TONGUE_H__
typedef void *TONGUE_HANDLE;
TONGUE_HANDLE tongue_init(JNIEnv *env,const char *paramPath, const char *modelPath);
int tongue_uninit(TONGUE_HANDLE handle);
int tongue_detect(TONGUE_HANDLE handle, cv::Mat img, cv::Rect &box);
#endif//__TONGUE_H__
4.数组转成int8_t
jbyte *yuv = env->GetByteArrayElements(yuvData, 0);
typedef int8_t jbyte; /* signed 8 bits */
(unsigned char *) yuv代码转换
cv::Mat imgSrc(height, width, CV_8UC3, (unsigned char *) yuv);
cv::Mat imgDst = convertTo3Channels(imgSrc);
using namespace cv;
using namespace std;
<span style="color:#000000"><span style="color:#333333">98年以后的c++语言提供一个全局的命名空间namespace,可以避免导致全局命名冲突问题</span></span>
因此,当使用<iostream.h>时,相当于在c中调用库函数,使用的是全局命名空间,也就是早期的c++实现;当使用< iostream>的时候,该头文件没有定义全局命名空间,必须使用namespace std;这样才能正确使用cout。#include <iostream.h>
using namespace std; 则出错
所以 要么写成
#include <iostream >
using namespace std;
要么写成
#include <iostream.h>
当然最好是前种
TongueInfo ti;
long processImage_time_start = getCurrentTime();
int rc = processImage(imgSrc, ti);
int processImage(cv::Mat src, TongueInfo &ti)
{
//src > BGR
cv::Rect rect;
int rc;
memset(&ti, 0, sizeof(ti));//清空先前存的结果
typedef struct _TongueInfo {
bool isTongue;
float togueLocation[4];
} TongueInfo;
memset(&ti, 0, sizeof(ti));//清空先前存的结果
//计算时间
long getCurrentTime()
{
struct timeval tv;
gettimeofday(&tv, NULL);
return tv.tv_sec * 1000 + tv.tv_usec / 1000;
}