函数指针

嵌入式相关知识每日一练4 文章目录Q1:带参宏和函数的区别?Q2:已知数组table,用宏求数组元素个数。Q3:对于一个频繁使用的短小函数,在C语言中应用什么实现,在C++中应用什么实现?Q4:宏定义是在编译的哪个阶段被处理的?Q5:请写一个c函数,若处理器是big_endian的,则返回0;若是little_endian的,则返回1Q6:头文件中的ifndef/define/endif干什么用的?Q7:用typedef定义函数指针,要求函数的参数(float * , float*),返回值intQ8:TCP/IP 建立连接的过程? 阅读详情

1)          函数指针的定义/用法

l       声明与定义分离

float (*pFunc) (int) //声明

这是一个指向参数为int,返回值为float的函数指针。

float Print(int a)

{

return 1.1f;
}

          pFunc = Print; 

          float f = (*pFunc)( 1 );

               

l       声明与定义

float (*pFunc) (int) = Print; //声明和定义

float f = (*pFunc)( 1 );

 

l       函数指针数组

float (*pFunc[]) (int) = {Print1, Print2, Print3};

 

l       typedef

typedef float (*Func) ( int );

Func p[10]; // 10个函数指针

 

          注意:如果定义函数指针时不加(),则有如下:

          float *pFunc(int);// 这是一个函数声明, 函数返回float*

 

2)          例子解析

l       返回值是指针数组的函数指针

void* (* (*Func)(int)) [10];

首先 void** (*Func) (int) 是一个函数指针,参数是int,返回值是一个指针,指向的是10个void指针的数组。(*(*Func))表示返回值是一个指针。

 

l       返回值是函数指针的函数指针

float (* (*Func) ( int ) ) (double);

首先 (*Func) (int) 是一个函数指针,参数是int,返回值是一个函数指针,指向参数为double,返回值为float的函数。(*(*Func))表示返回值是一个指针。

 

l       返回值是函数指针数组的函数指针

float (* ( * (*Func)(int)) [10] ) (double);

首先(*Func)(int)是一个函数指针,参数是int,返回值是一个指针

【 (*(*Func))表示返回值是一个指针】。这个指针指向的是一个指针数组。数组里的指针是函数指针,指向的是参数为double,返回值为float的函数。

 

l       带括号和不带括号的区别

int (* ( *Func (double) ) [10] ) (float);

这是一个函数声明而不是函数指针,参数是double,返回值是一个指针,指向一个数组,数组里是函数指针,这个函数参数为float,返回值是int。

 

函数指针、函数指针数组、指向函数指针数组的指针 目录 一、函数指针(本质是指针) 1.( * ( void( * )( ) )0)( ) ; 2.void( * signal ( int,void( * )( int ) ) )( int ) 二、函数指针数组 (本质是数组) 三、指向函数指针数组的指针(本质上是一个指针) 4.回调函数 建议在看函数指针前,了解一下数组指针,指针数数组的解析,假如本来就了解的化就可跳过。 点击打... 阅读详情

相关推荐

kettle从入门到精通 第九十二课 ETL之kettle 使用Kettle的Carte对外发布读写接口

场景:使用kettle实现将查询结果返回给客户端,也就是说kettle暴露查询接口供外围系统调用。前提必须是使用carte服务才可以提供接口供外部系统调用。具体实操方法如下:1、设计转换根据具体需求设计转换,主要用到的步骤有获取变量(从请求参数中获取变量)、json输入(解析入参),json 输出将结果转换为json格式输出到客户端。如下图所示:2、接收参数使用获取变量步骤来接收接口请求参数,变量通过${}方法进行获取,如下图${PARAM}则是获取PARAM参数,将参数赋值为req字段。

zhangjin1222的博客 954

typedef函数指针用法

1.简单的函数指针的应用 形式1:返回类型(*函数名)(参数表)  char (*pFun)(int); char glFun(int a){ return;} void main() { pFun = glFun; (*pFun)(2); }          第一行定义了一个指针变量pFun。首先我们根据前面提到的“形式1”认识

Liam Q的专栏 20万+

树莓派+STM32+激光雷达:大学生工训赛智能物流小车全栈开发实录(附避坑指南)

本文详细记录了基于树莓派、STM32和激光雷达的智能物流小车全栈开发过程。文章从系统架构设计、硬件集成、软件框架搭建到机械臂控制与视觉辅助定位,系统阐述了如何构建一个完整的机器人系统,并分享了在电源管理、通信延迟、里程计误差等关键环节的实战避坑指南,为嵌入式与机器人开发提供了宝贵经验。

kotlin6android的博客 748

C语言-返回数组并输出其值

先看如下程序: #include<stdio.h> #define M 2 #define N 3 int main() { float* average_stu(float score[][3]);//函数声明 float score[M][N]={{89,99,80},{100,88,90}}, *aver_stu; int i; //每个学生平均成绩 aver_stu=a...

qq_40286155的博客 3130

Windows下用RKDevTool解包update.img的完整流程(含常见错误排查)

本文详细介绍了在Windows系统下使用RKDevTool工具解包update.img固件的完整流程。从工具准备、环境搭建到逐步解包操作,重点解析了输出文件结构,并提供了修改分区后重新打包的实战方法。文章还针对解包失败、打包错误等常见问题提供了详细的排查与解决方案,旨在帮助嵌入式开发者和爱好者高效完成固件分析与定制工作。

aa123的博客 717

【ros】ROS1的安装和相关使用方法

主要学习ros相关内容

Greary的博客 2379

C 中typedef 函数指针的使用

类型定义的语法可以归结为一句话:只要在变量定义前面加上typedef,就成了类型定义。这儿的原本应该是变量的东西,就成为了类型。 int integer; //整型变量int *pointer; //整型指针变量int array [5]; //整型数组变量int *p_array [5]; //整型指针的数组的变量int (*array_pointer) [5];//整型数组的指针...

weixin_30278237的博客 493

cadence数模混合仿真反标sdf

数模混合IC设计时经常要调用一些Verilog模块(最简单的例如SPI接口),在前仿时一般直接用rtl代码来仿真,但是后仿时要关注因寄生带来的延迟,避免这些额外的延迟导致时序错误,因此不能简单地采用RTL来仿真。 一般有两种办法:1是采用由RTL综合得到的门级电路来仿真,这种方法比较简单,但是缺点是规模较大,而且只包括门延迟不包括因版图导致的线延迟;如果想要仿真更精细,就要对该这部分门电路提取寄生参数; 另一种方式是利用sdf文件(standard delay format)来进行仿真。后端工具在布局布

长河柱天的博客 7275

函数指针定义和typedef

声明返回值是int*的一个函数: int* f(int a, int b);   调用方法: int* a = f(1, 2); 声明f是一个返回int,有2个int参数的函数变量:int (*f)(int a, int b); 调用方法: f = funcA; f(1,2);  或: f = &funcA; (*f)(1,2); 声明f是一个返回int,有2个int参数

xiuzhentianting的博客 535

深度强化学习系列(13): 策略梯度(Policy Gradient)

对于DQN来说使用一个网络直接逼近了值函数,最后取得了非常不错的效果, 但是对于一些连续性控制或者动作空间特别大的环境来说,很难全部计算所有的值函数来得到最好的策略,那么直接计算策略的方法就别提出来了。 回顾一下前面几篇,所谓的策略,其实就是状态到动作的映射数学表达为 π:s→aπ:s→a\pi : s \to a, 我们用ττ\tau 表示状态s到最后一个状态的一个序列,表示为: τ:st...

深度强化学习(DeepRL)探索博客 4642

【C语言基础】野指针与空指针

全网最接地气的C语言野指针介绍,此处对于野指针与空指针知识点做一些简要的介绍,作者实属初学,写博客也是作者学习的一个过程,难免文章中有内容理解不到位或者有不当之处,还请朋友们不吝指正,希望大家多多给予支持,赠人玫瑰,手有余香! 文章目录一:野指针1.1 :野指针的成因2.1 :规避野指针二:空指针 一:野指针 概念:野指针就是指向的内存地址是未知的(随机的,不正确的,没有明确限制的)。 说明:指针变量也是变量,是变量就可以任意赋值。但是,任意数值赋值给指针变量没有意义,因为这样的指针就成了野指针,此指针指向

qq_43727529的博客 2万+

函数指针和函数指针数组

函数指针:指向函数的指针。 函数指针数组:一个数组里面存的类型是函数指针。 一、函数指针的声明和调用 1.指针声明: 函数指针顾名思义就是一个指向函数的指针。 int Add(int x,int y) { return x+y; } char* Sub(char*) { } //声明函数指针并初始化 int (*Add)(int ,int ) ptr=&Add; char* (*Sub)(char*) prt_char=&Sub; 这里声明了两个函数指针.

weixin_45423515的博客 8822

整车 EOL下线 测试系统介绍

整车下线(EOL)测试专门针对整车进行设计开发,是车企将组装好的整车交付客户前的 最后一道检测工序。EOL 测试针对的是整车下线测试,不同于零部件下线,是整车级别的下线 测试,测试过程关系整车的每个零部件,其测试质量直接影响到整车的质量好坏。因此,整车EOL测试是整车下线必不可少的测试过程.

王小奎的博客 5490

详解C语言指针函数、函数指针、函数指针数组

在C语言中,指针是一个很重要但是又很容易弄错的概念,也可以说指针就是C语言的灵魂,所以说学好指针对于完全掌握C语言是一个必须的过程。而在指针中,指针函数、函数指针、指针函数数组、函数指针数组、指向函数指针数组的指针等等概念看着又绕又头疼。本问总结了一下以上一些概念以及用法,并给出例程深化理解。 1. 指针函数 指针函数就是返回指针值的函数,本质是一个函数。所以指针函数等价于“返回值为指针的函数...

一只大笨猫的博客 2万+

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

掌握指针进阶:一篇带你玩转函数指针、函数指针数组及指向函数指针数组的指针!!

数组是一个存放相同类型数据的存储空间,那我们已经学习了指针数组//数组的每个元素是int*那要把函数的地址存到一个数组中,那这个数组就叫函数指针数组,那函数指针的数组如何定义呢?答案是:parr1parr1先和[]结合,说明parr1是数组,数组的内容是什么呢?是int (*)()类型的函数指针。转移表总之,函数指针数组实际上是一个数组,其元素都是指向函数的指针。这使得我们可以将不同的函数存储在数组中,并通过索引来调用特定的函数。

深入解析C/C++编程技巧,带你探索高效开发之路 1410

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

详解函数指针和类成员函数指针

作者:倾夜·陨灭星尘 一.什么是函数指针? 函数指针,顾名思义即指向函数的指针。 如果要问,为什么能用一个指针指向一个函数呢?我觉得要理解这个问题,以及要理解后面的函数指针和类成员函数指针,没有什么比从计算机原理的角度来理解更容易了。这里就简要回顾一下相关知识。 众所周知,计算机(图灵机)执行程序的基本流程就是:取指令->执行指令->取下一条指令->……。取指令的位置由一个寄存器PC决定。

yyx112358的博客 1万+

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

函数指针、函数指针数组,函数指针数组的指针

数组指针 概念:数组指针是指针,只要是指针他就占4个字节; 例如: 整形指针:int *p;能够指向整形数据的指针    浮点型指针:float *p;能够指向浮点型的数据的指针 那么数组指针,同样的理解就是指向数组的指针。 Eg:  int (*p)[10] 解释:这里的p由于小括号的原因和*先结合,所以他就是指针,然后指向的是一个大小为10的整形数组,所以p首先是一个指针,然后指向

Gary的面包屑小道 1万+

指针深入了解——函数指针,函数指针数组,指向函数指针数组的指针。

我们上期了解了,数组指针,指针数组,我们知道了,数组也有自己的地址,那么函数有没有自己的地址呢?如果有那又该怎么存起来呢?今天我们就一起来探讨一下。

qq_63943454的博客 1205

函数指针和函数指针类型

参考:https://blog.youkuaiyun.com/candyliuxj/article/details/6339414 函数指针 1.     定义 每一个函数都占用一段内存单元,它们有一个起始地址,指向函数入口地址的指针称为函数指针。 注意:函数指针的本质是一个指针变量,且指针指向的函数的入口地址 2.     语法 指向函数的指针变量的一般定义形式为:        数据类型  ...

杨树的博客 7780

函数指针详解

  这篇文章把函数指针的各种常用情况做了一个详解的总结。 1. 指向普通函数的指针 很简单,如下的例子可以说明基本格式和用法:int int_add(int a, int b){ return (a+b);}int int_sub(int a, int b){ return (a-b);}int (*int_operato

sparkliang的专栏 1万+

【C语言】函数指针、函数指针数组、函数指针数组的指针

一.函数指针 1.定义理解 函数指针:是一个指针,存放函数地址的指针。 函数的地址可以通过取地址函数名拿到,也可以通过函数名直接拿到。2.函数指针 (1)定义一个函数test void test(char *str) {     printf("%s\n",str); } int main() {     //函数指针的定义方式     void (*p)(char *str) = test...

Miss_Monster的博客 1230

三种函数指针的表达以及函数指针概念讲解

函数指针的使用和定义方法函数指针的概念三种表达函数指针的方法函数指针的调用方法 函数指针的概念 三种表达函数指针的方法 函数指针的调用方法 #函数指针概念 如果在程序中定义了一个函数,那么在编译时系统就会为这个函数代码分配一段存储空间,这段存储空间的首地址称为这个函数的地址。而且函数名表示的就是这个地址。既然是地址我们就可以定义一个指针变量来存放,这个指针变量就叫作函数指针变量,简称函数指针。 #三种表达函数指针的方法 接下来通过简单加法运算函数:int add(int a,int b)来演示其对应的函数指

qq_37975668的博客 1587

C/C++函数指针、函数指针数组、函数指针数组的指针理解与应用

转自:https://www.cnblogs.com/haore147/p/3647262.html 1.函数指针的定义   顾名思义,函数指针就是函数的指针。它是一个指针,指向一个函数。看例子: A) char * (*fun1)(char * p1,char * p2); B) char * *fun2(char * p1,char * p2); C) char * fun3(...

job_baiqiang的博客 2054
上一篇: 调试信息
下一篇: 构造与析构
yeming81
博客等级 码龄19年 178粉丝 49原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值