Java程序员学习C++之数组和动态数组

数组:

#include <iostream>
using namespace std;

//模板函数
template <class T>
void dump(T val)
{
	cout << ">>>>" << __FUNCTION__ << endl;//内置的宏,打印当前函数的名字
	cout << sizeof(val) << ":" << typeid(val).name() << endl;
	cout << "<<<<" << __FUNCTION__ << endl << endl;
}

void dump1(int a[])
{
	cout << "a=" << a << endl;//第一个元素的地址
	cout << "&a=" << &a << endl;//指针的指针
	cout << "a+1=" << a + 1 << endl;//数组第二个元素的地址(+4)
	cout << "&a+1=" << &a + 1 << endl;//指向指针地址的下一个变量(+4)
}

int main()
{
	const int len = 6;
	int a[len] = { 0, 2, 4, 6, 8 };//赋值少一个没关系,没有赋值会有默认值0
	int *pa = a;
	int *pa2 = a;
	//a是一个指针指向数组的第一个元素
	cout << "a=" << a << endl << "&a[0]=" << &(a[0]) << endl;

	for (int i = 0; i < len;i++)
	{
		a[i] = i;
		cout << "a[" << i << "]=" << a[i] << " "
			 << "*(a+i)=" << *(a + i) << " "
			 << "*(i+a)=" << *(i + a) << " "  //由上面表达式根据加法的结合律
			 << "i[a]=" << i[a] << " "

			 //cout << *(a++) << endl;//编译出错,a是数组的首地址(相当于常量),不能再对a进行赋值了
			 << "*(pa++)=" << *(pa++) << " "
			 << "pa[" << i << "]=" << pa2[i] << " "
			 << "*(pa+i)=" << *(pa2 + i) << " "
			 << "i[pa]=" << i[pa2] << " "
			 //综上,操作数组可以通过数组名,也可以通过指针变量
			 << endl;
	}
	cout << "===================数组类型和指针类型=======================" << endl;
	cout << sizeof(a) << ":" << typeid(a).name() << endl;//24:int[6]
	dump(a);//4:int*
	//在数组声明的作用域之内,a是数组类型;在作用域之外(包括函数传递),a退化成一个整形指针

	cout << "====================数组类型取地址======================" << endl;
	cout << "a=" << a << endl;
	cout << "&a=" << &a << endl;//和上面的值一致都是第一个元素的地址
	cout << "a+1=" << a+1 << endl;//数组第二个元素的地址(+4)
	cout << "&a+1=" << &a+1 << endl;//数组后一个变量的地址(+4*6)

	cout << "====================指针类型取地址======================" << endl;
	dump1(a);
	return 0;
}

动态数组:

#include <iostream>
using namespace std;

/*C++内存管理
  栈:编译器自动分配和删除变量的区
      存储如局部变量,函数参数等;
	  高效但空间有限
  堆:存储由应用程序分配和删除的区
      不释放分配的内存会造成内存泄露
  全局/静态存储区:存储全局变量和静态变量
  常量存储区:存放常量,不允许修改
*/
int main()
{
	//动态数组定义格式:int *a = new int[array_size];
	//释放格式:delete []a;
	int len = 0;
	cin >> len;
	int *p = new int[len];

	for (int i = 0; i < len;i++)
	{
		p[i] = i;
		cout << "p[i]=" << p[i] << endl;
	}

	delete []p;
	return 0;
}

区别:

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-11-02 17:26:08

Java程序员学习C++之数组和动态数组的相关文章

【Python】Java程序员学习Python(五)— 函数的定义和使用

不想做一个待宰的羔羊!!!!要自己变得强大.... 函数的定义和使用放在最前边还是有原因的,现在语言趋于通用,基本类型基本都是那些,重点还是学习对象的使用方法,而最根本的还是方法的使用,因此优先介绍,方法的目的还是重用和封装 一.方法的定义 方法的定义使用关键词def来定义,定义格式如下: def 方法名(参数定义): 方法体 方法名:方法名的规范同变量名规范一样 参数定义:比较复杂,后面会进行讲解 冒号:这个类似于Java的{},必不可少 方法体:方法实现的功能在此定义即可 简单的例子: #定

Java程序员学习的6个小技巧

Java程序员学习的6个小技巧 知识改变命运,对于Java程序员来说,技术不断更新,只有及时充电,才能不被市场淘汰.北京Java培训机构分享Java程序员学习的6个小技巧兄弟连IT教育作为全国最大的PHP培训机构,迄今已有10年的教育历史,7大特色课程:PHP教程.安卓培训.JAVAEE+大数据.UI设计.HTML5培训.云计算架构师,全栈工程师培训,在目前IT市场特别火,每门课程都由名师牵头,以认认真真的态度做教育,培养的学员过万,在学员心中树立了良好的口碑. 1.一定要看书 现在学习Java

Java程序员学习之路

1. Java语言基础 谈到Java语 言基础学习的书籍,大家肯定会推荐Bruce Eckel的<Thinking in Java>.它是一本写的相当深刻的技术书籍,Java语言基础部分基本没有其它任何一本书可以超越它.该书的作者Bruce Eckel在网络上被称为天才的投机者,作者的<Thinking in C++> 在1995年曾获SoftwareDevelopment Jolt Award最佳书籍大奖,<Thinking in Java>被评为1999年Java

聊聊阿里社招面试,谈谈“野生”Java程序员学习的道路

阿里社招面试都问什么? 和之前一样,文章一上来,我们先来谈谈阿里的社招面试都问什么,其实这个话题并不是什么秘密,所有来阿里面试过的同学,都能回答一二. 两年前的时候,笔者在文章里是这么回答的. 这个是让LZ最头疼的一个问题,也是群里的猿友们问的最多的一个问题. 说实话,LZ只能隐约想起并发.JVM.分布式.TCP/IP协议这些个关键字,具体的问题真的是几乎都没记住.而且就算LZ记住了,也告诉你了,你也背会了,但LZ觉得,在面试中,你被问到一模一样问题的可能性依然很小. 甚至,就算你运气好被问到了

【Python】Java程序员学习Python(二)— 开发环境搭建

巧妇难为无米之炊,我最爱的还是鸡蛋羹,因为我和鸡蛋羹有段不能说的秘密. 不管学啥,都要有环境,对于程序员来说搭建个开发环境应该不是什么难题.按顺序一步步来就可以,我也只是记录我的安装过程,你也可以滴. 一.准备Java环境 我已经说过了,其实我是一个Java程序员,所以学习过程中会有很多Java相关的内容和对比.先介绍下我的基本情况 jdk1.8 eclipse即可,版本最新的 怎么安装java,配置环境变量什么的,我都不会再说了,我这不是小白教程,我相信具备一定的能力. 二.准备Python环

写给自己的Java程序员学习路线图

如下是我做开发这几年经常使用一些技术和工具,当然这些技术也都是需要加强的(有些是我一直使用的,不过不深入,有些内部的原理等等不是很清楚) 前端部分: 1)HTML:网页的核心语言,构成网页的基础 2)CSS:使网页更加丰富多彩灿烂的利器 3)JavaScript:使网页动起来的根本,加强了网页和用户之间的交互 4)HTML DOM:换一种更加形象化的角度来看待网页,让我们更加方便的控制网页 5)HTML BOM:与浏览器交互不可或缺的工具 6)JavaScript库,主要是:jQuery及其插件

Java程序员学习一天半C++的感想

大学期间,学了一学期的C语言,当然包括学习数据结构时,用的也是C语言.当时刚刚接触计算机,对于编程更是一无所知.上课学习学习,偶尔会照着书上敲一下代码.大二下学期,就丢掉了不用了.最近由于工作的需要,要使用Java Native Interface,所以就学习了1天半的C++,对C++有了一点点的了解,写一下自己的理解. 一天半时间,也学不多少东西,我主要就搞明白了下面几个问题: 1)指针 这么多年了,还记得在C语言时,最难以理解的,应该属于指针了.还记得谭浩强的那本C语言书(书名是啥,真的忘了

java程序员学习c++的感觉

大学编程课期间, 学了一学期的C语言,当然包括学习数据结构时,用的也是C语言.当时刚刚接触计算机,对于编程更是一无所知.上课学习学习,偶尔会照着 书上敲一下代码.大二下学期,就丢掉了不用了.最近由于工作的需要,要使用Java Native Interface,所以就学习了两天半的C++,对C++有了一点点的了解,写一下自己的理解. AD: 两天半时间,也学不了多少东西,我主要就搞明白了下面几个问题: 1)指针 这么多年了,还记得在C语言时,最难以理解的,应该属于指针了.还记得谭浩强的那本C语言书

面试?顺谈Java程序员学习中各阶段的建议

第一个问题:阿里面试都问什么? 这个是让LZ最头疼的一个问题,也是群里的猿友们问的最多的一个问题.说实话,LZ只能隐约想起并发.JVM.分布式.TCP/IP协议这些个关键字,具体的问题真的是几乎都没记住.而且就算LZ记住了,也告诉你了,你也背会了,但LZ觉得,在面试中,你被问到一模一样问题的可能性依然很小. 甚至,就算你运气好被问到了,你也照着背下来了,也不一定就能对你的面试起到正面的作用,因为面试官万一多问一句,你可能就露馅了,那还不如干脆点说不会更好. LZ参加的是阿里的社招面试,而社招不同

作为Java程序员,你真的了解springboot动态数据源的内幕吗?

做了这么多年的Java程序员,好像使用多数据源的情况非常少,特别是现如今微服务这么火的情况下,不同的业务访问一个数据库是常态,而且Java访问数据源真没有PHP等脚本语言来得那么简单方便,但是在特殊业务情况下,还不得不使用多数据源,今天我们就来讲讲这方面的话题 一.应用案例 我们的数据库A为主库,其他数据库配置在主库中,从库B,C,D的数量是不固定的,会根据业务的需要动态的把配置写入到主库中并动态在创建新的数据库,也就是说在项目中我们只需要配置主库的数据源,其他从库都需要从主库中读出配置并动态创