指针

c++复合类型

别等时光非礼了梦想. 提交于 2020-02-01 01:04:24
1.数组 数组存储同类型的值; 数组使用下标或索引对元素进行标号,从0开始编号; 只能在定义数组时才能使用初始化,此后就不可以了,也不能将一个数组赋给另一个数组; 初始化数组时,提供的值可以少于数组元素的值。如果只对数组的一部分初始化,则编译器将把其他元素设置为0。因此,将数组中所有元素都初始化为0非常简单——只需显式地将第一个元素初始化为0,然后让编译器将其他元素都初始化为0即可:long totals[500] = {0}. 2.字符串   要将字符串存储到数组中,最常用的方法有两种——将数组初始化为字符串常量、将键盘或文件输入读入到数组中。 3.string类 可以使用c-风格字符串来初始化string对象; 可以使用cin来将键盘输入存储到string对象中; 可以使用cout来显示string对象; 可以使用数组表示法来访问存储在string对象中的字符。   c风格的字符串是用数组存放的,一般要以'\0'结束而c++主要以 string类 代替,更加高效,且不易出错   例如:string str = "123";就是c++的风格;char str[4]="123";就是c风格。string是c++中的关键字,和int,float等等一样, 在c++中,string 定义的变量可以直接存储字符串。在C语言中是没有这种直接存储字符串的变量的。   [ ]里面是4,是因为

C++基础总结(4)-----指针

耗尽温柔 提交于 2020-02-01 01:04:08
指针是一个变量,其存储的值是地址,而不是值本身。 (有点类似于组成原理里面的变址寻址) 在讨论指针之前,我们先来看看如何寻找常规变量的地址。只需对变量引用取地址符(&)就行了。 如下面一段代码: #include <iostream> using namespace std; int main() { int dounts=6; double cpus=5.6; cout<<"dounts = "<<dounts<<", address is "<<&dounts<<endl; cout<<"cpus = "<<cpus<<", address is "<<&cpus<<endl; return 0; } *运算符被称为间接值或者解除引用运算符。将其用于指针,便可以得到该地址存储的值。 duck变量为int型变量,其分配的地址是1000,里面存储的值是12,而birding是一个int型指针变量它本身的地址是1006,而在它里面存储的值duck的地址1000。 所谓指针指的是存储的其他变量的地址。 指针的声明和初始化 int *ptr;//声明一个int型指针 *两边的空格是可选的。 传统上,C程序员使用这种格式。 int *ptr;//强调*ptr是一个int类型 C++程序员通常使用下面这种方式 int* ptr; 强调int*之一中指向int类型的指针

JNA简单使用

可紊 提交于 2020-02-01 00:17:05
近期使用Java开发有关于摄像机接收到数据的上传,因为摄像机处理图像是用C语言实现的,所以开发需要用到JNA,实现JAVA对C语言的回调,因为具体的开发方式官方文档里面有示例,所以本文只是简单的把需要注意的点罗列出来。 一、 定义 JNA提供一些JAVA工具类,在运行期间访问本地库,如dll/so。 二、 数据类型对照表 官方提供的数据参考表完全够用,当使用数据参考时候,注意参考头文件宏定义。 1、常见数据类型对照 Java 类型 C 类型 原生表现 boolean int 32位整数 (可定制) byte char 8位整数 char wchar_t 平台依赖 short short 16位整数 int int 32位整数 long long long, __int64 64位整数 float float 32位浮点数 double double 64位浮点数 Buffer/ [Pointer] pointer 平台依赖(32或 64位指针) [] (基本类型的数组) Pointer/array 32或 64位指针(参数/返回值) 其他常用: Java 类型 C 类型 原生表现 String char* /0结束的数组 (native encoding or jna.encoding) WString wchar_t* /0结束的数组(unicode) String[] char

C++11 智能指针

社会主义新天地 提交于 2020-01-31 23:14:43
【1】C++11智能指针 应用示例如下: 1 #include <iostream> 2 #include <memory> 3 using namespace std; 4 5 void test_unique_ptr() 6 { 7 unique_ptr<int> up1(new int(2020)); // 无法复制的unique_ptr 8 // unique_ptr<int> up2 = up1; // 不能通过编译 9 cout << (*up1) << endl; // 2020 10 unique_ptr<int> up3 = move(up1); // 现在up3是数据唯一的unique_ptr智能指针 11 cout << (*up3) << endl; // 2020 12 // cout << (*up1) << endl; // 运行时错误 13 up3.reset(); // 显式释放内存 14 up1.reset(); // 不会导致运行时错误 15 // cout << (*up3) << endl; // 运行时错误 16 } 17 18 void test_shared_ptr() 19 { 20 shared_ptr<int> sp1(new int(131)); 21 shared_ptr<int> sp2 = sp1; 22 cout <<

c++堆,栈的存储方式及代码内存分配

天大地大妈咪最大 提交于 2020-01-31 22:32:25
使用对象指针 C语言中经典的指针在 C++ 中仍然广泛使用,尤其是指向对象的指针,没有它就不能实现某些功能。 Student stu ; Student * pStu = & stu ; 上面代码中创建的对象 stu 在栈上分配内存,需要使用&获取它的地址,例如: Student stu;Student *pStu = &stu; pStu 是一个指针,它指向 Student 类型的数据,也就是通过 Student 创建出来的对象。 当然,你也可以在堆上创建对象,这个时候就需要使用前面讲到的new关键字(C++ new和delete运算符简介),例如: Student *pStu = new Student; 在栈上创建出来的对象都有一个名字,比如 stu,使用指针指向它不是必须的。但是通过 new 创建出来的对象就不一样了,它在堆上分配内存,没有名字,只能得到一个指向它的指针,所以必须使用一个指针变量来接收这个指针,否则以后再也无法找到这个对象了,更没有办法使用它。也就是说,使用 new 在堆上创建出来的对象是匿名的,没法直接使用,必须要用一个指针指向它,再借助指针来访问它的成员变量或成员函数。 栈内存是程序自动管理的,不能使用 delete 删除在栈上创建的对象;堆内存由程序员管理,对象使用完毕后可以通过 delete 删除。在实际开发中,new 和 delete 往往成对出现

LeetCode 881 救生艇(贪心)

佐手、 提交于 2020-01-31 15:51:51
题目 第 i 个人的体重为 people[i],每艘船可以承载的最大重量为 limit。 每艘船最多可同时载两人,但条件是这些人的重量之和最多为 limit。 返回载到每一个人所需的最小船数。(保证每个人都能被船载)。 思路 排序+双指针+贪心 每次尽量选取一个较小的和一个较大的组合共用一条船。 代码 class Solution { public: int numRescueBoats(vector<int>& people, int limit) { sort(people.begin(),people.end());//排序,从小到大 int left=0,right=people.size()-1,sum=0;//双指针移动 while(left<=right){ if(people[left]+people[right]<=limit){//贪心,尽量满足limit sum++; right--; left++; } else{//若超重,说明右指针处单独要一条船,则右指针左移 sum++; right--; } } return sum; } }; 来源: https://www.cnblogs.com/ambassdor/p/12245486.html

C语言开发面试题

六月ゝ 毕业季﹏ 提交于 2020-01-31 11:40:41
 (以下是题主参加的一家偏向Linux平台开发的公司软件岗位笔试题,分享原题,后面附上题主91分的部分参考答案^V^) 一、(8分)请问一下程序输出什么结果? char *getStr(void) {   char p[] = "hellow world";   return p; } void test(void) {   char *str = NULL;   str = getStr();   printf(str); } 二、(5分)test2函数有问题吗,如果有,请支出问题出在什么地方并给出正确答案。 void test2() {   char string[10], str[10];   int i;   for(i = 0; i < 10; i++)   {     str[i] = 'a';   }   strcpy(string, str); } 三、(5分)用预处理指令#define 声明一个常数,用以表明一年中有多少秒。(忽略闰年问题) 四、(5分)写一个“标准”宏MIN,这个宏输入两个参数并返回较小的一个。 五、(8分)你怎么样用C编写死循环呢? 六、(10分)用变量a给出下面的定义: 1、一个整型数; 2、一个指向整型数的指针; 3、一个指向指针的指针,它指向的指针是指向一个整型数; 4、一个有10个整型数的数组; 5、一个有10个指针的数组

C语言趣味题目

江枫思渺然 提交于 2020-01-31 11:39:55
http://sunxiunan.com/?p=1647 在这个网站上 http://stevenkobes.com/ctest.html 发现一套很有趣的C语言测试题,如果你招聘C语言相关开发人员,或者正在学习C语言,很值得参考。 如果没有做,下面内容暂时不要看,最好自己先完成一遍。 —————————————– OK,假设你做的答案没有完全正确,那你可以继续看下去了,否则,后面内容对你来说就是小菜一碟,不值得看。 ——————————————– 第一题: #include <setjmp.h> static jmp_buf buf; int main(void) { volatile int b = 3; if (setjmp(buf) != 0) { printf(“%d\n”, b); exit(0); } b = 5; longjmp(buf, 1); } 输出结果为A)3 B)5 C)0 D)都不是 答案为B,也就是输出5。 关键点在于理解setjmp以及longjmp,( http://en.wikipedia.org/wiki/Setjmp.h )第一次运行到setjmp,会设置jmp_buf,然后返回0。当调用longjmp时,会把longjmp里面的非0值作为setjmp的返回值返回(如果longjmp的value参数为0,setjmp恢复后返回1

Git(七)分支

喜欢而已 提交于 2020-01-31 10:58:55
分支 分支:就是一条时间线,线上每个点都是一次提交,都记录了当时的文件快照 分支概述 1>默认有一个分支,master. 2>分支中接收 git commit 提交的内容,为一个一个不断向前发展的摆交点。每个提交点都保存一个代码版本。 3>每个分支,都有一个指针,指针默认指向最近一次提交的版本。 4>工作区中的内容,初始状态,就是指针所指向的版本状态。 5>基于指针指向的版本代码,在工作区中做进一步的编码,功能完成后,即可 git commit ,在分支中形成新的提交点,指针也后移一步。 6然后再在工作区中,添加新代码,功能完成,再 git commit ,又形成新的提交点,指针再次后移。如此反复,不断开发,不断记录版本。 7>当有需要时,可以回退指针到某个提交点,在工作区中即可得到之前的某个版本的代码。 如下是分支效果图 来源: CSDN 作者: 姠暀洎甴 链接: https://blog.csdn.net/qq_42222342/article/details/104105513

Java引用解析

本小妞迷上赌 提交于 2020-01-31 06:51:36
本文对源码的解析基于JDK13。 1. Java对象的引用 1.1 引用的概念   谈引用之前,我们先看一下指针,在可以操作指针的语言中,指针代表的是内存的地址,通过操作指针我们可以直接操作内存。Java语言不直接操作指针,即不直接操作内存(但是我们可以通过 Unsafe 类间接操作内存)。我们所操作的是引用,有了一个对象的引用,我们就可以操作这个对象,而对象分配在内存中,对对象的修改实际上是对内存的读写。所以我们理解的引用本质是别名,实际上引用存储的数值是一块内存的地址。在Java中,如果一块内存存放着另一块内存的地址,我们可以称这块内存为引用。所以 Object o = new Object() 中 o 本质上是我们刚new出来的对象在内存中地址,无论这个对象是普通对象还是数组对象。 1.2 Reference类解析   首先,万物皆对象。谈 Reference 类前,我们先类比 Class 类,我们知道 Class 类是对类对象的抽象, Class 类的实例表示正在运行的类和接口。 Reference 类是对引用对象的抽象,与 Class 类不同的是, Reference 类是抽象类,并不能直接实例化。 Reference 类是与垃圾回收紧密相关的,该类提供了部分接口以便更好的帮助JVM进行GC。它的子类可被实例化