指针

halcon图像转换为byte 指针格式

拟墨画扇 提交于 2020-02-12 00:15:36
某些时候,如获取图像像素值采用halcon函数GetGrayval时 速度较慢,可以通过把HObject图像格式转换为byte格式提高访问速度。具体方法如下: HTuple hv_Pointer, hv_byte; GetImagePointer1( ho_ImgBinT, &hv_Pointer, &hv_byte, &m_MapWidthT, &m_MapHeightT); BYTE ptr = (BYTE )hv_Pointer[0].L(); 通过ptr[行数 宽度+列数]访问像素值。 来源: CSDN 作者: 笑看风云^_^ 链接: https://blog.csdn.net/weixin_43913330/article/details/104270311

函数指针和回调函数

流过昼夜 提交于 2020-02-11 23:15:15
/* 指针函数 */ /* (__type__*) function(int, int)返回的是指针地址, (__type__) function(int, int)返回的是int型数据。 */ /* 函数指针 */ /* 函数指针有两个用途:调用函数和做函数的参数。 */ /* __type__ (*function)(int, int) */ /* 只是一个指针,变量指针是指向一个变量的地址, 结构体指针是指向一个结构体的首地址, 而函数指针是指向一个函数的地址, 它是一种类型,比int,char高级的类型。 */ /* 回调函数 */ int (*function)(int, int); typedef int (*pfun)(int, int); int Max(int a, int b) { return a > b ? a : b; } int Min(int a, int b) { return a < b ? a : b; } /* 函数指针调用例子 */ int Num1 = 20, Num2 = 30; function = Max; printf("Max is %d\n", function(Num1, Num2)); printf("Max is %d\n", (*function)(Num1, Num2)); function = Min; printf

从零学习C++第五章:复合数据的描述——构造数据类型(二)

送分小仙女□ 提交于 2020-02-11 22:51:16
5.5 指针类型——内存地址的描述 在C++中,用指针类型来描述内存地址,通过指针操作来实现与内存地址有关的程序功能 5.5.1 指针类型的定义 指针类型 (pointer type ) 是一种用户自定义的数据类型,值集是由一些指针构成的集合,是内存地址的抽象表示。 指针与 无符号整数 的联系与区别: 形式:指针属于无符号整数 概念: 一个指针对应某个内存单元,关联到某个变量或函数;一个无符号整数代表一个数量或序数,不关联到其他程序实体 对无符号整数所能实施的运算,有些运算对指针没意义(乘除) 对于一个内存地址所属的指针类型由该内存地址所代表的内存单元中存储的程序实体的类型决定,因此内存地址不宜用无符号整数类型来表示 定义指针时,必须指出该指针指向何种类型的程序实体。指向数据的指针类型通常与该类型的指针变量同时定义,格式为: <类型> * <指针变量>; <类型> :为指针所指向的数据的类型 一个指针变量所指向的数据类型可以是void,表明该指针可指向任意类型的数据,使用该类型的指针时,要对其进行显示转换为某个具体类型的指针 * :表示定义的是指针变量,区分于普通变量的定义 <指针变量> :所定义的指针类型的变量的名字,用标识符表示 指针变量拥有自己的内存空间 ,指针变量的值是该指针指向的一个实体的内存地址 可以通过 取地址操作符“ & ” 来获得一个变量的地址

void指针学习

末鹿安然 提交于 2020-02-11 13:38:34
1)可以用任何类型的指针对 void 指针进行赋值   由于void 指针没有特定的类型,因此可以指向任何类型的数据。因此他可以指向任何类型的数据。也就是说,任何类型的指针都可以直接赋值给 void 指针,而无需进行其他相关的强制类型转换。   例如:   double d = 1.54;   void * p = & d; 2)void 指针不可以直接赋值给其它类型的指针   因为 “空类型” 可以包容 “有类型”,而 “ 有类型” 则不能包容 “空类型”。   由此可见,要将 void 指针赋值给其他类型的指针,必须进行强制类型转换。如: 1 void * p1; 2 int * p2; 3 . . . 4 p2 = (int *)p1; 3)避免对 void 指针进行算术操作   ANSI C 标准规定,进行算法操作的指针必须确定知道其指向数据类型大小,也就是说必须知道内存目的地址的确切值。 1 char a[20]="qwertyuiopasdfghjkl"; 2 int *p=(int *)a; 3 p++; 4 printf("%s", p);  // tyuiopasdfghjkl   p++;一步前进了sizeof(int)=4 个字节,而类型为char,sizeof(char)=1   对于 void 指针,编译器并不知道所指对象的大小,所以对 void

ios学习之旅---指针也不难

我们两清 提交于 2020-02-11 12:51:08
1、认识指针 #include <stdio.h> //基本数据类型作为函数參数传递是值传递 //void moveFront(int x ,int y) //{ // x = x + 2; //} void test() { // 确定当前坐标 int x = 20; int y = 150; printf("%p\n",&x); printf("%lu\n",&x); *((int *)(0x7fff5fbff76c)) = 22; printf("(%d,%d)\n",x,y); // moveFront(x, y); // printf("(%d,%d)\n",x,y); } //假设你想訪问指针所指向存储空间,就必须使用訪问指针所指向的存储空间的操作符 void moveFront(int *x ,int *y) { // x = x + 2;//此时是改变指针的指向,而不是訪问指针所指向的存储空间 *x = *x + 2; } int main(int argc, const char * argv[]) { // 确定当前坐标 int x = 20; int y = 150; printf("(%d,%d)\n",x,y); moveFront(&x, &y); printf("(%d,%d)\n",x,y); return 0; } 2、指针的定义与初始化(重点掌握

C++ 引用详解

我与影子孤独终老i 提交于 2020-02-11 12:00:07
引用是C++引入的新类型,是对一块内存空间起的一个别名,主要分为 左值引用 、 常量左值引用 和 右值引用 三种。C++语言标准规定,一个引用不是左值引用就是右值引用。其中, 函数引用 是一种特殊的左值常量引用; 万能引用(universal reference) 是一种特殊的引用类型,既可以表示左值引用,也可以表示右值引用,具体的引用类型最终会由编译器决定,判断依据是 引用折叠(reference collasping) 。 一、左值引用 一句话总结:左值引用是一级指针的语法糖 。只有左值才能绑定到左值引用上。 int &a = 0; // a是int*的语法糖。 int *b = nullptr; int *&b_ref = b; // b_ref是int**的语法糖。 大量的资料表示,编译器中的引用是以指针实现的。然而,左值引用必须要初始化后才能使用,否则会引发编译错误(这与指针不同,野指针或者空指针即便不初始化也可以通过编译),所以可以这样理解: 如果代码通过了编译,那么引用的对象一定是可用的 。然而,凡事有利必有弊,这样的特性也会导致问题。最典型的问题是: 引用无法表示空值 。例如,有些对象的成员并不是必需的,在复制文件时并不一定需要提供进度通知,应该由用户自行决定,而不是强制要求提供: class file_copier { progress& _progress; /

ios学习之旅---指针也不难

落爺英雄遲暮 提交于 2020-02-11 10:24:41
1、认识指针 #include <stdio.h> //基本数据类型作为函数參数传递是值传递 //void moveFront(int x ,int y) //{ // x = x + 2; //} void test() { // 确定当前坐标 int x = 20; int y = 150; printf("%p\n",&x); printf("%lu\n",&x); *((int *)(0x7fff5fbff76c)) = 22; printf("(%d,%d)\n",x,y); // moveFront(x, y); // printf("(%d,%d)\n",x,y); } //假设你想訪问指针所指向存储空间,就必须使用訪问指针所指向的存储空间的操作符 void moveFront(int *x ,int *y) { // x = x + 2;//此时是改变指针的指向,而不是訪问指针所指向的存储空间 *x = *x + 2; } int main(int argc, const char * argv[]) { // 确定当前坐标 int x = 20; int y = 150; printf("(%d,%d)\n",x,y); moveFront(&x, &y); printf("(%d,%d)\n",x,y); return 0; } 2、指针的定义与初始化(重点掌握

C++ 空间配置器allocator类

烈酒焚心 提交于 2020-02-11 09:26:44
allocator类 C++中,内存分配和对象构造紧密纠缠(new),就像对象析构和回收一样(delete)。如果程序员想接管内存分配,即将内存分配和对象构造分开,对于前者,主要是分配和释放未构造的原始内存;对于后者,主要是在原始内存中构造和撤销对象。 分配和释放未构造的原始内存 两种方法: allocator类,提供可感知类型的内存分配; 标准库中的opeator new和operator delete,它们分配和释放需要大小的原始、未类型化的内存; 在原始内存中构造和撤销对象 不同方法: allocator类定义了名为construct和destroy的成员; placement new表达式,接受指向未构造内存的指针; 直接调用对象的析构函数来撤销对象; 算法uninitialized_fill 和 uninitialized_copy,在目的地构造对象; C++的STL中定义了很多容器,容器的第二个模板参数通常为allocator类型,标准库中allocator类定义在头文件memory中,用于帮助将内存分配和对象的构造分离开来。它分配的内存是原始的、未构造的。 表达式 说明 allocator<T> a 定义了一个名为a的allocator对象,它可以为类型T的对象分配内存 a.allocator(n) 分配一段原始的、未构造的内存,这段内存能保存n个类型为T的对象 a

C语言指针总结

╄→尐↘猪︶ㄣ 提交于 2020-02-11 07:15:44
C语言中的精华是什么,答曰指针,这也是C语言中唯一的难点。 C是对底层操作非常方便的语言,而底层操作中用到最多的就是指针,以后从事嵌入式开发的朋友们,指针将陪伴我们终身。 本文将从八个常见的方面来透视C语言中的指针,当然,还有其他没有具体提到的方面,像指针表达式、指针安全等问题,以后有机会我再慢慢补充。 还是那句老话,重要的是实践,多写代码,才是学好C语言的关键。 1.指针类型分析 分析指针,可以从变量名处起,根据运算符优先级结合,一步一步分析. int p; //这是一个普通的整型变量 int *p; //首先从P处开始,先与*结合,所以说明P是一个指针,然后再与int结合,说明指针所指向的内容的类型为int 型.所以 P是一个返回整型数据的指针 int p[3]; //首先从P处开始,先与[]结合,说明P 是一个数组,然后与int结合,说明数组里的元素是整型的,所以 P是一个由整型数据组成的数组 int *p[3]; //首先从P处开始,先与[]结合,因为其优先级比*高,所以P是一个数组,然后再与*结合,说明数组里的元素是指针类型,然后再与 int结合,说明指针所指向的内容的类型是整型的,所以是一个由返回整型数据的指针所组成的数组 int (*p)[3]; //首先从P处开始,先与*结合,说明P是一个指针然后再与[]结合(与"()"这步可以忽略,只是为了改变优先级)

C语言 ---- 指针 iOS学习-----细碎知识点总结

萝らか妹 提交于 2020-02-11 07:15:27
内存的访问形式:1、直接访问:通过变量名进行访问。2、间接访问:先找到变量存放的地址,然后根据地址去访问对应的内存空间。 指针--- // 定义一个整形指针变量,用来存储num1在内存中的地址 int *p = NULL; // 定义一个整形指针变量,指向0x0,NULL恒等于0 printf("%p\n", p); // 输出指针变量的值,使用"%p" printf("&num1 = %p\n", &num1); // 取址运算符,取得变量所在的内存地址 p = &num1; // 给整形指针变量重新赋值 printf("p = %p\n", p); printf("*p = %d\n", *p); // "*"取值运算符,取出地址里面存储的数据 // 当我们定义指针变量的时候,"*"只是起一个标识作用,告诉我们这个变量是一个指针变量。 // 当我们使用指针变量的时候,"*"表示的是从当前地址里面取出存储的数据。 // 指针的算术运算,只有加和减 int num1 = 100; int num2 = 200; int *p = &num2; printf("*p = %d\n", *p); printf("*(p + 1) = %d\n", *(p + 1)); // p + 1是指针向高位移动n个字节,n指的是指针指向的数据类型所占有的字节数(int *p移动4个字节,