指针

java与C++的区别

不问归期 提交于 2020-02-14 17:46:42
“作为一名C++程序员,我们早已掌握了面向对象程序设计的基本概念,而且Java的语法无疑是非常熟悉的。事实上,Java本来就是从C++衍生出来的。”   然而,C++和Java之间仍存在一些显著的差异。可以这样说,这些差异代表着技术的极大进步。一旦我们弄清楚了这些差异,就会理解为什么说Java是一种优秀的程序设计语言。本附录将引导大家认识用于区分Java和C++的一些重要特征。   (1) 最大的障碍在于速度:解释过的Java要比C的执行速度慢上约20倍。无论什么都不能阻止Java语言进行编译。写作本书的时候,刚刚出现了一些准实时编译器,它们能显著加快速度。当然,我们完全有理由认为会出现适用于更多流行平台的纯固有编译器,但假若没有那些编译器,由于速度的限制,必须有些问题是Java不能解决的。   (2) 和C++一样,Java也提供了两种类型的注释。   (3) 所有东西都必须置入一个类。不存在全局函数或者全局数据。如果想获得与全局函数等价的功能,可考虑将static方法和static数据置入一个类里。注意没有象结构、枚举或者联合这一类的东西,一切只有“类”(Class)!   (4) 所有方法都是在类的主体定义的。所以用C++的眼光看,似乎所有函数都已嵌入,但实情并非如何(嵌入的问题在后面讲述)。   (5) 在Java中,类定义采取几乎和C++一样的形式。但没有标志结束的分号

ZYNQ sdk使用 c/c++ 指针记录

生来就可爱ヽ(ⅴ<●) 提交于 2020-02-14 17:13:01
1.简述 像ZYNQ这样的soc fpga期间,开发起来真的太难,能熟练开发fpga已经很难了,现在fpga硬件逻辑需要开发,还要开发arm。现在使用zynq fpga 一年多了,断断续续用zynq做项目,用起来很爽同时也很酸爽。今天专门记一下c/c++ 的指针,这也不难,就是容易迷糊,一周不写c代码,指针就不会用了,没次都要花点时间重新捡起来,为了提高效率,还是总结一下,结合vivado 的sdk开发工具记录。 2.正文 1)准备 vivado搭建一个简单PS 的工程(记得勾选uart),生成bit,导出硬件,启动sdk,新建helloworld的工程就行。然后跑一下,看串口是否能打印helloworld。如果可以,这就成功搭建工程了。 2)开始 (1) 进入debug模式,页面如下,黄框是现在代码运行的位置,我们要点击红框中的按钮进行单步调试(这个对熟悉单片机或者arm开发的来说很熟悉),我们简单在hello world源码上简单添加蓝框中的代码。可以看到粉红框中有变量的信息,现在的值是不对的,因为data那行代码还没运行,点击红框,值就会变成我们代码赋的值。 (2)点击后,可以看到data值变了,这是十进制的数,可以用计算器转成16进制数,是一样的。把鼠标放到data上面会显示data信息,可以知道data地址,如红框中的。在右下角,点击进入memory ,点击加号

智能指针(pointer like classes)

岁酱吖の 提交于 2020-02-14 08:39:46
为什么要有智能指针 C++的内存分为两种,栈和堆。栈中的内存使用之后不需要程序员去释放,会被自动释放。而在堆中分配的内存,是不能自动回收,需要程序员通过书写代码去回收。(malloc在堆中分配的内存由free来回收,New在堆中分配的内存由delete来回收。) 如何智能回收内存 借助RAII机制,RAII(Resource Acquisition Is Initialization),是C++采用的一种管理资源的方式。RAII是采用栈和依构造、析构函数的特性来管理资源。文字描述不够清晰,我们用代码来演示: void test ( ) { ClassA * pClassA = new ClassA ( ) ; . . . . delete pClassA ; } 上诉代码表面看上去并没有问题,但在实际使用时,会经常有问题。比如在delete之前,函数退出了,那么这里就会发生内存泄漏。 前面说了,智能指针是依托栈和构造、析构的机制。如果我们把指针封装成一个类,类的构造函数分配内存,析构函数中释放内存。 在函数的最初,使用这个类构造对象,构造完,这个指针对象就指向了一块堆内存,可以使用这块内存。但是,这个指针对象在函数中是局部变量,是存储在函数栈中的。当函数结束时,该函数栈中所有的局部变量都会被释放,所以刚才构造的指针对象就会被销毁。而销毁一个对象,就会自动调用它的析构函数

数据结构与算法(2)

a 夏天 提交于 2020-02-14 01:51:24
1 双向线性链表 2 单向线性链表 1 双向线性链表 1.1 问题 双向线性链表是采用链式存储的方式存储的线性表。链式存储结构是由一系列结点(链表中每一个元素称为结点)组成,每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储当前结点的前驱结点和后继结点地址的指针域,结点是在有数据时动态生成的,是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。 1.2 方案 双向线性链表的基本操作包括: 初始化操作,在初始化操作中将双向线性链表的头指针指空。 求表长,求表长操作是计算出双向线性链表中结点的个数。 取双向线性链表中指定位置的结点,即给定双向线性链表中的第几个结点,求其值。 查找结点,在双向线性链表中查找值为x的结点,并返回该结点在双向线性链表中的位置。若双向线性链表中有多个结点的值和x相同,则返回首次找到的结点位;若双向线性链表中没有结点的值为x,则返回一个NULL表示查找失败。 插入结点,在双向线性链表的第i个结点前插入一个值为x的新结点。 删除结点,删除双向线性链表的第i个结点。 1.3 步骤 实现此案例需要按照如下步骤进行。 步骤一:定义双向线性链表 在C语言中: 1)定义一个变量来表示双向线性链表中某个结点的数据。 2)定义两个指针来表示该结点的前驱结点和后继结点的地址。 3

智能指针类模板

老子叫甜甜 提交于 2020-02-14 01:48:24
文章目录 1 智能指针介绍 1.1 智能指针的意义 1.2 STL中的智能指针 1.3 Qt中的智能指针 2 创建智能指针类模板 1 智能指针介绍 1.1 智能指针的意义 智能指针具有如下意义: 现代C++开发库中最重要的类模板之一。 C++中自动内存管理的主要手段。 能够很大程度上避开内存相关的问题。 1.2 STL中的智能指针 STL中的智能指针auto_ptr: 生命周期结束时,销毁指向的内存空间。 不能指向堆数组,只能指向堆对象(变量)。 一片堆空间只属于一个智能指针对象。 多个智能指针对象不能指向同一片堆空间。 编程实验:auto_ptr使用初探 # include <iostream> # include <string> # include <memory> using namespace std ; class Test { string m_name ; public : Test ( const char * name ) { cout << "Hello, " << name << "." << endl ; m_name = name ; } void print ( ) { cout << "I'm " << m_name << "." << endl ; } ~ Test ( ) { cout << "Goodbye, " << m_name << ".

36. 合并两个排序的链表

拜拜、爱过 提交于 2020-02-14 01:15:22
算法 (二路归并) O(n) 1.新建头部的保护结点dummy, 设置cur指针指向dummy。 2. 若当前l1指针指向的结点的值val比l2指针指向的结点的值val小,则令cur的next指针指向l1,且l1后移;否则指向l2,且l2后移。 3 .然后cur指针按照上一部设置好的位置后移。 4.循环以上步骤直到l1或l2为空。 5.将剩余的l1或l2接到cur指针后边。 时间复杂度 两个链表各遍历一次,所以时间复杂度为O(n) /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: ListNode* merge(ListNode* l1, ListNode* l2) { ListNode *dummy = new ListNode(0); ListNode *cur = dummy; while(l1 && l2){ if(l1->val < l2->val) { cur->next = l1; l1 = l1->next; } else { cur->next = l2; l2 = l2->next; }

java基本的知识第一天。

我们两清 提交于 2020-02-14 00:33:45
本博客的所有文均为自己学习的笔记,学习用到的资料的内容并非原创,从原作者处学习。 1个字节是8位 然后的话用byte表示 然后的话K和byte的关系是1024 也就是说k这个单位对应的1024是和byte相比的。 这里可以看到就是各种数据类型 然后的话和我之前看的不一样的地方是:python的话不怎么注重数据类型的 直接就用了。 这里可以看到就是各个占的字节数,key是字节的数量,也就是说:对于byte来说,是1个字节 反而short的话比byte还多了 而int是4个字节 float的话也是四个字节 double是8个。 char的话是两个字节。 这里说的是它的存储,就是存储的空间的大小的问题。short反而比byte要多,单位是字节来的。 这里的话说的是:每个数据类型能够表示的数的最大和最小的问题,至于具体的话为什么说正的数比负的数是少1的关系呢,我个人解释来说如果符号位是0 后面全部填的都是1的话 那么加起来确实就是最大值-1, 但是的话为什么负可以到最小的数呢? 我认为是不是因为10000000这样表示的是:-128的问题呢?这里我还存疑 知道的话每种数据类型表示的最大和最小的数是多少先。 这里是说:布尔类型是用boolean来表示 然后的话char是字符型的。 这里的话是说有个var类型 就是可以不写变量类型。 括号进行类型的强制转换,上课的时候老师好像说的是:C+

C++ 智能指针

断了今生、忘了曾经 提交于 2020-02-13 15:13:04
转载来源: 作者: KillerAery 出处: http://www.cnblogs.com/KillerAery/ 来源: CSDN 作者: angry_bot 链接: https://blog.csdn.net/github_38704428/article/details/104295086

2019春第七周学习&编辑总结

你说的曾经没有我的故事 提交于 2020-02-13 14:36:26
这个作业属于哪个课程 C语言程序设计二 这个作业要求在哪里 2019春季学期第七周作业 我的课程目标 掌握数组名作为函数参数的用法,理解指针、数组和地址之间的关系,理解指针和数组可以实现相同的操作。。 这个作业在哪个具体方面帮助我实现目标 题目让我学会如何操作运用指针 参考文献 c语言程序设计第3版 基础题 6-2 每个单词的最后一个字母改成大写 (10 分) 函数fun的功能是:将p所指字符串中每个单词的最后一个字母改成大写。(这里的“单词”是指由空格隔开的字符串)。 函数接口定义: void fun( char *p ); 其中 p 是用户传入的参数。函数将 p所指字符串中每个单词的最后一个字母改成大写。 裁判测试程序样例: #include <stdio.h> void fun( char *p ); int main() { char chrstr[64]; int d ; gets(chrstr); d=strlen(chrstr) ; chrstr[d] = ' ' ; chrstr[d+1] = 0 ; fun(chrstr); printf("\nAfter changing: %s\n", chrstr); return 0; } /* 请在这里填写答案 */ 输入样例: my friend is happy 输出样例: After changing: mY

数据结构之链表定义及基本操作实现

对着背影说爱祢 提交于 2020-02-13 14:06:30
  在我上一篇的博客中说过,数据结构的线性结构中有连续存储结构和离散存储结构,这次就写一写学习离散存储结构——链表的小总结。   首先说一下链表的定义:链表是物理存储单元上非连续、非顺序的存储结构,链表的结点间通过指针相连,每个结点只对应有一个前驱结点和一个后继结点,其中,首结点没有前驱结点,尾节点没有后继结点。上述表述共同构成了对链表的定义。   接下来说一下链表的结构:链表由头结点+有效节点构成,其中有效节点由分为首结点、普通节点、尾节点。 头结点:链表中有效结点前面的结点,头结点并不存放实际数据,仅仅是为了方便对链表的操作。 头指针:头结点并没有什么实际的含义,仅仅是为了方便对链表的操作,而头指针,顾名思义,就是指向头结点的指针。我们通过头指针指向的头结点的指针域对链表进行操作。 首结点:链表的第一个有效的结点。 尾结点:链表中最后一个有效的结点,尾结点的指针域为空。   链表已经学习完毕,那么接下来就是要说一下链表的构成——结点。因为链表是一张离散存储的结构,所以就需要通过地址去访问,那么久需要在结点中保存下一个结点的地址。还是用到c语言中的结构体。 1 //定义链表的节点 2 typedef struct Node{ 3 //数据域 4 int data; 5 //指针域 6 struct Node * pNext; 7 }NODE,*PNODE;   结点定义完毕后