码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2015-07-06 12:18:58      阅读:102      评论:0      收藏:0      [点我收藏+]

标签: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;
}

区别:

技术分享







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

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

标签:c++   数组   动态数组   

原文地址:http://blog.csdn.net/easion_zms/article/details/46772157

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!