精华内容
下载资源
问答
  • 文/Edward上一节中,我们利用了一个小知识来介绍了一下指针,在上面这个例子中,小明和小丽手中的这个杯子就好比我们C语言中的变量,它确实是实实在在存放一些有具体意义的数据。这个杯套就类似于C语言中指针的作用...

    de98969452617c342ebccec853cda009.png

    文/Edward上一节中,我们利用了一个小知识来介绍了一下指针,在上面这个例子中,小明和小丽手中的这个杯子就好比我们C语言中的变量,它确实是实实在在存放一些有具体意义的数据。这个杯套就类似于C语言中指针的作用,假设我们由100个这种杯子的内胆,里面分别存放了不同类型的饮料,那么我们想要拿取其中某一杯饮料时,只需要手中有1个杯套,就可以取不同的饮料了。再来说下函数参数传递的问题。在C语言中,每个变量被定义好之后(Auto类型定义),编译器便会在内存的栈区为它们开辟出来内存空间来存放这些变量。这些内存空间不管是连续的还是断续的,它们都会被分配不同的地址。而如果这些变量作为形式参数传入函数的时候,实际上仅仅是把变量里面存放的常数传递给函数,而函数内部的临时变量又是这个函数被初始化的时候创立的,和调用处的传递变量不是同一个,因此不管再怎么去改写形式参数里面传递进来的内容,本质上只是改变函数内部这些局部变量的内容。21be2bd2d7fd85022c25c25932c657c1.png函数参数传递指针从一开始被设计出来的时候,其目的不是用来存储某一个具体的常量或变量,它的目的只有一个,就是存放相应变量的地址,即这个变量的内存地址。我们定义完成一个变量之后,就可以将这个指针指向这个变量了。所谓指向某个变量,说直白点就是将这个变量的地址存入指针中。当我们在用指针作为数据交换函数的传递参数时,它其实传入的是这两个变量的地址,而在函数中我们在做这两个变量内容交换时,传递进入函数的指针变量的值是不会变的,还是存放最初的这两个变量的地址,但是当我们做交换操作时,就将原本存在地址A中的变量放入了地址B,将原本存放在B中的变量放入了地址A。45bb77d1554057a58afc4652b49d7eb6.png指针变量形式参数执行流程所以说,我们在交换两个变量的内容时使用指针形式参数去传递参数,从现象上来看貌似是将两个形式参数的内容交换了,但是从本质上来看,指针形式参数的内容其实是没有任何变化的,变化的只是这两个指针所指向的内存中的内容进行了改变。理解了这个函数的指针形式参数,接下来的内容就很理解了。指针的定义需要用到一个特殊的符号“*”,这个符号和运算符中的乘法运算符是同一个,以后在使用的时候需要注意。这个“*”指针运算符在做指针运算的时候具有两种含义,我们先来讲述下在定义指针变量时的用法。指针变量的定义方式为:数据类型 *指针变量名 = 初始化值;如定义一个指针变量“a_pt”,让其指向int类型变量a。根据上面所写的,定义一个名叫“a_pt”的指针变量很简单,但是首先要去确定定义的这个指针变量的数据类型,一般地,我们用这个指针变量指向什么类型的变量,就将其定义成那个相应的类型。这里我们所指向的变量是int类型的,因此将这个指针变量定义成int类型。第二点需要注意的是如何将这个指针变量初始化的时候就指向变量a,前面我们说过,指针变量最终的目的就是用来存储变量的地址,因此只需要在指针变量“a_pt”初始化的时候,将变量a的地址赋给这个指针变量即可。那么如何获取变量a的地址呢?只需要在变量前面加“&”符号即可返回变量a的地址。我们可以写个简单的程序,先定义一个变量a,然后用“&”符号获取其地址,再将这个地址打印出来。f844dc3499c42fb78745f024e640be28.png获取变量地址并打印在我们顺利获取到变量地址之后,只需要将这个地址直接赋值给我们定义的指针变量即可。23ec16aaf2e6a14bd5a462d913ba365c.png指针变量的定义我们定义了一个整形类型的指针,并且将其指向变量a。当然,根据我们指向对象的不同,我们还可以定义如char类型,long类型,float类型这些简单的数据类型指针,甚至还可以定义后面会学习的指针数组,结构体指针等复杂的数据类型指针。

    02c908050d72e9875d9a67f3d5f2f4cc.gif

    a6ee8485e4b528741bb14d7bca642cb3.png

    展开全文
  • iOS开发中经常会遇到空指针的问题。如后台传回来的Json数据,程序中不做判断就直接赋值操作,很有可能...利用AFNetworking网络请求框架获取数据。这样就可以删除掉含有null指针的key-value。但有时候,我...
        

    iOS开发中经常会遇到空指针的问题。如从后台传回来的Json数据,程序中不做判断就直接赋值操作,很有可能出现崩溃闪退。为了解决空指针的问题,治标的方法就是遇到一个处理一个。这样业务代码里面就插了很多判断语句,费时又费力。现在有一个简单的办法。

    利用AFNetworking网络请求框架获取数据。



    这样就可以删除掉含有null指针的key-value。

    但有时候,我们想保留key,以便查看返回的字段有哪些。没关系,我们进入到这个框架的AFURLResponseSerialization.m类里,利用搜索功能定位到AFJSONObjectByRemovingKeysWithNullValues,贴出代码:

    staticidAFJSONObjectByRemovingKeysWithNullValues(idJSONObject, NSJSONReadingOptions readingOptions) {if([JSONObject isKindOfClass:[NSArrayclass]]) {NSMutableArray*mutableArray = [NSMutableArrayarrayWithCapacity:[(NSArray*)JSONObject count]];for(idvalue in (NSArray*)JSONObject) {            [mutableArray addObject:AFJSONObjectByRemovingKeysWithNullValues(value, readingOptions)];        }return(readingOptions & NSJSONReadingMutableContainers) ? mutableArray : [NSArrayarrayWithArray:mutableArray];    }elseif([JSONObject isKindOfClass:[NSDictionaryclass]]) {NSMutableDictionary*mutableDictionary = [NSMutableDictionarydictionaryWithDictionary:JSONObject];for(id key in [(NSDictionary*)JSONObject allKeys]) {idvalue = (NSDictionary*)JSONObject[key];if(!value || [value isEqual:[NSNull null]]) {//这里是本库作者的源代码//[mutableDictionary removeObjectForKey:key];//下面是改动后的,将空指针类型改为空字符串mutableDictionary[key] = @"";            }elseif([value isKindOfClass:[NSArrayclass]] || [value isKindOfClass:[NSDictionaryclass]]) {                mutableDictionary[key] = AFJSONObjectByRemovingKeysWithNullValues(value, readingOptions);            }        }return(readingOptions & NSJSONReadingMutableContainers) ? mutableDictionary : [NSDictionarydictionaryWithDictionary:mutableDictionary];    }returnJSONObject;}

    展开全文
  • App类就是这个SDI作为"程序"的入口,有点像c的Main函数,它不是CWND中派生出来的。App表示应用程序本身。   View表示视图类,负责显示数据,提供编辑数据、修改数据的功能。它是指编辑区里面的事就是那块白色的...

    MainFrame: 主框架类

    Dlg 是Dialog 的缩写,表示对话框本身

     
    App类就是这个SDI作为"程序"的入口,有点像c的Main函数,它不是从CWND中派生出来的。App表示应用程序本身。

     
    View表示视图类,负责显示数据,提供编辑数据、修改数据的功能。它是指编辑区里面的事就是那块白色的中间区域,负责绘制和响应一些消息

     
    Doc表示文档类,提供对数据的保存和加载。有点像数据库,保存着编辑数据,用于view的Redraw的时候用,还有保存文件。

     一般动态的编辑数据都放在Doc里面。他也不是从CWND中派生出来的,没有继承MessageBox函数,可以用AfxMessageBox函数。


    VC中编程对于刚刚开始学习的同学,最大的障碍和问题就是消息机制和指针获取与操作。其实这些内容基本上是每本VC学习工具书上必讲的内容,而且通过MSDN很多问题都能解决。下面文字主要是个人在编程中指针使用的一些体会,说的不当的地方请指正。一般我们使用的框架是VC提供的Wizard生成的MFC App Wizard(exe)框架,无论是多文档还是单文档,都存在指针获取和操作问题。下面这节内容主要是一般的框架,然后再讲多线程中的指针使用。使用到的类需要包含响应的头文件。首先一般获得本类(视,文档,对话框都支持)实例指针this,用this的目的,主要可以通过类中的函数向其他类或者函数中发指针,以便于在非本类中操作和使用本类中的功能。 

        1   View中获得Doc指针    

    CYouSDIDoc   *pDoc=GetDocument();一个视只能有一个文档。    

        2)   App中获得MainFrame指针    

      CWinApp   中的   m_pMainWnd变量就是MainFrame的指针    

      也可以:   CMainFrame   *pMain   =(CMainFrame   *)AfxGetMainWnd(); 

        3)   View中获得MainFrame指针 

      CMainFrame   *pMain=(CmaimFrame   *)AfxGetApp()‐>m_pMainWnd; 

        4)   获得View(已建立)指针 

      CMainFrame   *pMain=(CmaimFrame   *)AfxGetApp()‐>m_pMainWnd;    

      CyouView   *pView=(CyouView   *)pMain‐>GetActiveView(); 

        5)   获得当前文档指针 

      CDocument   *   pCurrentDoc   =(CFrameWnd   *)m_pMainWnd‐>GetActiveDocument(); 

        6)   获得状态栏与工具栏指针 

      CStatusBar   *   pStatusBar=(CStatusBar   *)AfxGetMainWnd()‐>GetDescendantWindow(AFX_IDW_STATUS_BAR);    

      CToolBar   *   pToolBar=(CtoolBar   *)AfxGetMainWnd()‐>GetDescendantWindow(AFX_IDW_TOOLBAR);    

        7)   如果框架中加入工具栏和状态栏变量还可以这样      

      (CMainFrame   *)GetParent()‐>m_wndToolBar;    

      (CMainFrame   *)GetParent()‐>m_wndStatusBar;    

        8)   Mainframe获得菜单指针 

      CMenu   *pMenu=m_pMainWnd‐>GetMenu(); 

        9)   在任何类中获得应用程序类    

      用MFC全局函数AfxGetApp()获得。    

      10)   从文档类取得视图类的指针    

      我是从http://download.cqcnc.com/soft/program/article/vc/vc405.html学到的,    

      从文档获得视图类指针目的一般为了控制同一文档的多个视图的定位问题,我的体会    

      特别是文字处理CEditView当产生多个视图类时,这个功能是非常需要的。      

      CDocument类提供了两个函数用于视图类的定位:    

      GetFirstViewPosition()和GetNextView()      

      virtual   POSITION   GetFirstViewPosition()   const;    

      virtual   CView*   GetNextView(POSITION&   rPosition)   const;    

         

      注意:GetNextView()括号中的参数用的是引用方式,因此执行后值可能改变。    

      GetFirstViewPosition()用于返回第一个视图位置(返回的并非视图类指针,而是一    

      个POSITION类型值),GetNextView()有两个功能:返回下一个视图类的指针以及用    

      引用调用的方式来改变传入的POSITION类型参数的值。很明显,在Test程序中,只有    

      一个视图类,因此只需将这两个函数调用一次即可得到CTestView的指针如下(需定    

      义一个POSITION结构变量来辅助操作):      

      CTestView*   pTestView;    

      POSITION   pos=GetFirstViewPosition();    

      pTestView=GetNextView(pos);    

         

      这样,便可到了CTestView类的指针pTestView.执行完几句后,变量pos=NULL,因为没    

      有下一个视图类,自然也没有下一个视图类的POSITION.但是这几条语句太简单,不    

      具有太强的通用性和安全特征;当象前面说的那样,当要在多个视图为中返回某个指    

      定类的指针时,我们需要遍历所有视图类,直到找到指定类为止。判断一个类指针指    

      向的是否某个类的实例时,可用IsKindOf()成员函数时行检查,如:    

        pView‐>IsKindOf(RUNTIME_CLASS(CTestView));    

      即可检查pView所指是否是CTestView类。    

         

      有了以上基础,我们已经可以从文档类取得任何类的指针。为了方便,我们将其作    

      为一个文档类的成员函数,它有一个参数,表示要获得哪个类的指针。实现如下:      

          

      其中用了两次视图类的成员函数IsKindOf()来判断,是因为退出while循环有三种    

      可能:    

         

      1.pos为NULL,即已经不存在下一个视图类供操作;    

      2.pView已符合要求。    

         

      1和2同是满足。这是因为GetNextView()的功能是将当前视图指针改变成一个视图    

      的位置同时返回当前视图指针,因此pos是pView的下一个视图类的POSITION,完全    

      有可能既是pos==NULL又是pView符合需要。当所需的视图是最后一个视图是最后一    

      个视图类时就如引。因此需采用两次判断。    

      使用该函数应遵循如下格式(以取得CTestView指针为例):    

      CTestView*   pTestView=(CTestView*)GetView(RUNTIME_CLASS(CTestView));    

      RUNTIME_CLASS是一个宏,可以简单地理解它的作用:将类的名字转化为    

      CRuntimeClass为指针。至于强制类型转换也是为了安全特性考虑的,因为从同一个    

      基类之间的指针类型是互相兼容的。这种强制类型转换也许并不必要,但能避免一    

      些可能出现的麻烦。    

         

      3.从一个视图类取得另一视图类的指针   综合1和2,很容易得出视图类之间互相获得    

      指针的方法:就是用文档类作中转,先用1的方法得到文档类的指针,再用2的方法,    

      以文档类的视图定位函数取得另一个视图类。同样,可以实现成一个函数:    

      (假设要从CTestAView中取得指向其它视图类的指针)    

       这个函数和2中的GetView()相比,一是多了第一句以取得文档类指针,二是在    

      GetFirstViewPosition()和GetNextView()前加上了文档类指针,以表示它们是文档    

      类成员函数。有了此函数;当要从CTestAView中取得CTestBView的指针时,只需如    

      下:CTestBView*   pTestbView=(CTestView*)GetView(RUNTIME_CLASS(CTestBView)); 


    展开全文
  • 取值,获取标签属性,禁止输入,还有前端获取参数防止报空指针异常 最近在写一个简单的前端输入表格如图! 这里面有些小问题的解决方案,希望有类似问题的能帮到你 好 那么开始! 需求呢就是一个这么个表格可以输入一些...

    前端按钮赋值.取值,获取标签属性,禁止输入,还有前端获取参数防止报空指针异常 The following has evaluated to null or missing:

    最近在写一个简单的前端输入表格如图!

    在这里插入图片描述
    这里面有些小问题的解决方案,希望有类似问题的能帮到你 好 那么开始!

    需求呢就是一个这么个表格可以输入一些数据后台校验咱就不说了然后保存的时候要禁止表单重复输入哈 也就是这样!

    在这里插入图片描述

    看到没表单变灰了 也就是说保存的时候就是禁止输入的状态 整体的代码我给大家贴出来

    这是html的(为了方便我只贴一部分)这里面解释下那个<#if>标签干了啥,那个是判断从ExjTaxInvoiceAptitue实体类里面取出的值是是否为空,如果是那就不显示,如果值存在那就显示.为啥加这个判断呢 原因是我从后端传过来的时候如果是新用户进来他一定没有输入内容是吧(往下看!因为我要贴图)

    在这里插入图片描述

    所以你这个属性如果直接在这展示的话后台会报错,前端是没问题的,后台会报这样的错 如图! 因为你后台没有查询出来数值 所以前段你的那个value=" ${exjTaxInvoiceAptitude.bankAccount}">属性不存在所以报错 在小圆圈里的是以前的代码(很明显的对比!)

    在这里插入图片描述

    这是报错的后端提示如图! 在这里插入图片描述

    在这里插入图片描述

    这个问题就是因为第一次用户什么都没有输入所以什么都查不出来 我是这么查的 上图!

    在这里插入图片描述

    我是放到ModelAndView 里面转发到那个html页面的 根据从request里面获取的用户id来查询的实体信息 注意这个ModelAndView要是这个包的 别引错了! 后台呢也就是做了这些 new那个实体类呢是因为一开始点击页面报错了 然后想new一个实体类回去不过后面没删 因为如果从数据库查询数据报异常的会就会走catch么 我就想能不能返回一个实体,反正那个没用了 好不关心他!

    在这里插入图片描述

    后台获取数据那就是上面的做法然后转发到那个地址,接下来就是前段代码

    咱们怎么获取用户输入内容呢是吧,那就是通过input的name属性来获取 也就是这个如图

    在这里插入图片描述

    有了这个name属性咱们就能在一个function函数里面来获取用户输入的信息了,在点击保存的时候触发一个onclick也就是鼠标点击事件执行如下的函数

    在这里插入图片描述

    然后再js里面去弄一个函数也就是我们的点击保存时间喽!如图(也可以直接在html页面的script来定义,别的地方我没试过知道的大神可以告诉下 毕竟我是萌新哈)

    在这里插入图片描述

    这是在js定义的函数

    ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200706214501583.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,t

    这就是一个完整的函数结构 你请求的类型,还有地址 还有主题内容,接下来介绍置灰按钮防止重复提交很简单,

    那个orgName就是你的input的name属性在这里插入图片描述
    在这里插入图片描述你也可以禁用标签,那个orgName也可以直接换成html的标签那样更方便但是有些不需要的也给置灰了就不好了是吧

    那置灰禁止输入会了怎么解除呢 我这里的解决方案是点击编辑的时候执行一个函数里面(这就是我没有都禁用的原因,因为我要留一个嘿嘿!)

    在这里插入图片描述
    在这里插入图片描述

    点击保存禁止输入 然后点击编辑来解除控制(做人留点余地,给别人也给自己!)

    在这里插入图片描述

    这样也有问题因为你刷新页面就没了(对,就就没了,就是点击保存之后不可输入但是刷新网页就可以正常输入了)这个我在解决因为这个页面我今天才做完 差了好多资料才弄完我毕竟是个后台,谁让咱萌新呢,那个函数应该就能看懂了吧 我也不多解释了返回字符串就用json,拜拜 很希望有不对的请指出 里面很多东西都是查的资料,如有不妥误人子弟之处还请指出,谢谢!

    展开全文
  • C++ 与C#之间的指针参数传递,实现无限量数据的传递,轻松无压力,方便在C++里面获取或者C#传递数据到C++的动态库调用内。
  • C语言指针再谈

    2017-08-21 09:34:02
    参数传值c里面,参数不管类型是什么,它只会传值,所以,如果要想用一个已经声明的变量一个函数中带出一些数据,必须退后一步输入参数,也就是说输入它的地址,如果是指针,也输入它的地址。也就是说,函数开始时...
  • 在上一篇文章C++类里面使用函数指针 中已经介绍了函数指针的用法。其中,函数指针的声明void (CFunction::*ptrFunc[4])();指针获取ptrFunc[0] = &CFunction::functionA;这两点可以深入的理解C++类中,函数与类的...
  • 我先描述一下bug的现象哈:这两个输入框的值都是我KV(Redis之类的存储中间件)里面获取到的,也是可以实时修改的,我自作聪明,想着KV里面如果没值,就默认取一个静态变量,这样有个兜底,在类加载的时候加载静态...
  • 在项目启动时,需要做一些项目启动后的预操作,比如初始化数据进缓存等等。 这时就需要写listener,等监听。...这种方式获取bean的话,报错空指针异常!因为在 public void contextInitialized(ServletContex...
  • 今天遇到一个问题:交叉编译jthread和jrtp,然后将生成的静态库文件copy到我们自己的工程里面,我们的工程调用jrtp.a里面的函数,网络上获取rtp数据,但是在status = sess.Create(sessparams,&transparams);的...
  • mysql_init初始化数据库链接–得到一个链接 mysql_real_connect连接数据库服务器 执行mysql_query查询–查询语句是一个字符串 对每一行分别进行检索mysql_store_result–结果存储在链接里面,属于一次性查询 结果...
  • mysql_init初始化数据库链接–得到一个链接 mysql_real_connect连接数据库服务器 ...结果集,获取表头信息–mysql_fetch_fields–表头信息存储在MYSQL_FIELD类型的指针指向的内存空间 解析表头–mysql_f
  • 我把错误打印出来了,`QSqlError("", "Parameter count mismatch", "")` 说是参数错误,我输出了一下输入框获取的值,是成功的。所以应该是插入那一段代码有问题吧。但是我仔细看了一下我的数据文件,都是匹配的啊...
  • buf 里面获取数据,就会使用到strstr 以及strtok, 但需要注意的是,strstr函数找数据时会把原来的指针改变, 返回的指针是指向所要找的字符一直到后面的数据。 但不会破坏后面的字符串, 但如果使用strtok 函数...
  • 【FreeRTOS】消息队列

    2019-04-18 09:42:00
    一种常用于任务间通信的数据结构,队列可以在任务与任务间、中断和任务间传递信息,实现了任务接收来自其他任务或中断的不固定长度的消息,任务能够队列里面读取消息; 任务获取方式 先进先出原则(FIFO),或是...
  • 数组是内置(build-in)类型,是一组同类型数据的集合,它是值类型,通过0开始的下标索引访问元素值。 在c++里面我们使用数组在传参的时候传递的都是指针,但是在go里面对数组进行赋值或者是穿参都是传值的行为。...
  • 初衷是创建一个ImageData类,然后修改里面的像素。在SetOrigin,spacing,...VTK创建新图像时,若非从数据中读取信息,都需要预先分配内存。使用AllocateScalars()方法: m_Dosebuffer->AllocateScalars(VTK_FLOAT
  • LinkedList本身是一个,由Java中的链表思想的数据结构对象,类似于链表,而在Java里面,没有指针,是通过引用来连接的。是一个链表,同时也实现了队列和栈的操作。另外,它也是可以随机访问的,只是和前两篇的...
  • 同时开启很多其他的应用,这时可能会造成我们的app因内存不足而导致进程被杀死,这时我们在后台返回我们的app时,就会出现问题,特别是用到Application里面存储的变量时,这时会出现空指针的现象,这时我们就要想...
  • 对单片机堆栈的理解

    2020-07-27 15:11:47
    看关于单片机方面的书籍的时候,总是能看到...通常用来保存CALL指令调用子程序时的返回地址,RET指令堆栈中获取返回地址。中断指令INT调用中断程序时,将标志寄存器值、代码段寄存器CS值、指令指针寄存器IP值保存在
  • 岳维功 ortp-realease.pdf

    2020-12-24 04:00:17
    数据之前,会构造一个消息块,数据指针会指向 这避免了数据拷贝。较低层的接口处理薮据时依赖于消息玦结构。接收后的数据从消息块中 拷贝到用户 。接收的和包的解析处理函数在文件 和 文件 中实现。另外, 文件实现了...
  • SQL语法大全

    2014-03-30 11:00:11
    rs.eof 返回记录指针是否超出数据表末端,true表示是,false为否 rs.delete 删除当前记录,但记录指针不会向下移动 rs.addnew 添加记录到数据表末端 rs.update 更新数据表记录 -----------------...
  • 起始地址开始擦除数据的总大小 2.2.7 擦除 Flash 全部数据 sfud_err sfud_chip_erase(const sfud_flash *flash) 参数 描述 flash Flash 设备对象 2.2.8 往 Flash 写数据 sfud_err sfud_write(const...
  • 2.2.9 A,B,C,D四个进程,A向buf里面数据,B,C,D向buf里面数据,当A写完,且B,C,D都读一次后,A才能再写。用P,V操作实现。 2.3.0 将单向链表reverse,如ABCD变成DCBA,只能搜索链表一次。 2.3.1 将二叉树的...
  • 这样的设计在tomcat上跑一点问题都没有 HashMap中的数据也能取到,可是一但到websphere上HashMap中存储的TCifPhoto 这个persistence还在,就是persistence里面的二进制lob对象没有了,代码里看出系统输出了“omg ...
  • 而如果将一个空的对象拆箱,编译器上哪儿去找它里面的值类型变量的指针呢?所以这也是拆箱操作需要注意的地方。 最后,我们在把值类型和引用类型之间其它一些明显区别大致罗列如下,以便大家能顺利通过面试第一问。 ...

空空如也

空空如也

1 2 3
收藏数 52
精华内容 20
关键字:

从指针里面获取数据