数组:

#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;
}

差别:

二维的数组:

#include <iostream>
using namespace std; void print1(int a[2][3], int rowLen, int colLen)
{
cout << "=============print1===========" << endl;
//4:(*)[3]事实上就是指向二维数组的指针
cout << sizeof(a) << ":" << typeid(a).name() << endl;
for (int row = 0; row < rowLen; row++)
{
int *p = a[row];
for (int col = 0; col < colLen; col++)
{
cout << "a[" << row << "][" << col << "]="
<< a[row][col] << " "
<< *(p + col) << " "
<< p[col] << " "
<< *(*(a + row) + col) << " "
<< endl;
}
}
} void print2(int (*a)[3], int rowLen, int colLen)
{
cout << "=============print2===========" << endl;
for (int row = 0; row < rowLen; row++)
{
int *p = a[row];
for (int col = 0; col < colLen; col++)
{
cout << "a[" << row << "][" << col << "]="
<< a[row][col] << " "
<< *(p + col) << " "
<< p[col] << " "
<< *(*(a + row) + col) << " "
<< endl;
}
}
} int main()
{
//二维数组
const int I_ROW = 2;
const int I_COL = 3;
int a[I_ROW][I_COL] = { 1, 2, 3, 4, 5, 6 };
//int a[][I_COL] = { 1, 2, 3, 4, 5, 6 };第一维的能够省略
print1(a, I_ROW, I_COL); //指向二维数组的指针变量。格式:数据类型 (*指针名)[一维数组长度]
//int(*p)[4]
print2(a, I_ROW, I_COL); //指针数组,格式:数据类型 *数组名[数组长度]
//char *ary[2] = {str1,str2}
//二维数组和指针数组的区别?
char str1[] = "hello";
char str2[] = "test";
char str3[] = "!!"; char array1[3][8] = { "hello", "test", "!!" };//数组里面存储了字符串数据
char *array2[3] = { str1, str2, str3 };//数组里面存储了指向字符串数据的地址
char *array3[3] = { array1[0], array1[1], array2[2] };//数组里面存储了指向字符串数据的地址 return 0;
}

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

  1. 回答阿里社招面试如何准备,顺便谈谈对于Java程序猿学习当中各个阶段的建议

    引言 其实本来真的没打算写这篇文章,主要是LZ得记忆力不是很好,不像一些记忆力强的人,面试完以后,几乎能把自己和面试官的对话都给记下来.LZ自己当初面试完以后,除了记住一些聊过的知识点以外,具体的内容 ...

  2. Java程序猿学习当中各个阶段的建议

    回答阿里社招面试如何准备,顺便谈谈对于Java程序猿学习当中各个阶段的建议   引言 其实本来真的没打算写这篇文章,主要是LZ得记忆力不是很好,不像一些记忆力强的人,面试完以后,几乎能把自己和面试官的 ...

  3. 顺便谈谈对于Java程序猿学习当中各个阶段的建议

    引言 其实本来真的没打算写这篇文章,主要是LZ得记忆力不是很好,不像一些记忆力强的人,面试完以后,几乎能把自己和面试官的对话都给记下来.LZ自己当初面试完以后,除了记住一些聊过的知识点以外,具体的内容 ...

  4. 人在囧途——Java程序猿学习Python

    引言 LZ之前其实一直对python都很好奇,只是苦于平时没有时间去了解它,因此趁着51假期这个机会,便迫不及待的开始了自己的探索.作为一个标准的Java程序猿,在了解python的过程当中,LZ遇到 ...

  5. Java程序猿学习的建议(转)

    第一部分:对于尚未做过Java工作的同学,包括一些在校生以及刚准备转行Java的同学. 一.Java基础 首先去找一个Java的基础教程学一下,这里可以推荐一个地址,或者你也可以参照这个地址上去找相应 ...

  6. Java程序猿学习C++之字符串

    #include <iostream> #include <string.h> using namespace std; int my_len(const char *str) ...

  7. 如何准备阿里社招面试,顺谈 Java 程序员学习中各阶段的建议

    引言 其实本来真的没打算写这篇文章,主要是LZ得记忆力不是很好,不像一些记忆力强的人,面试完以后,几乎能把自己和面试官的对话都给记下来.LZ自己当初面试完以后,除了记住一些聊过的知识点以外,具体的内容 ...

  8. 一个两年java程序猿的2017个人总结

    前言 又到了一年中最后的日子了,相信有不少公司要求员工写年度总结了,我也不例外.不过个人感觉在公司的写个年度总结来说,过于模板化了.其实很多没有必要.总之,本篇的个人总结,是按照个人的想法写的.简而言 ...

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

    引言 很尴尬的是,这个类型的文章其实之前笔者就写过,原文章里,笔者自称LZ(也就是楼主,有人说是老子的简写,笔者只想说,这位同学你站出来,保证不打死你,-_-),原文章名称叫做<回答阿里社招面试 ...

随机推荐

  1. hadoop学习;Streaming,aggregate;combiner

    hadoop streaming同意我们使用不论什么可运行脚本来处理按行组织的数据流,数据取自UNIX的标准输入STDIN,并输出到STDOUT 我们能够用 linux命令管道查看文本有多少行,cat ...

  2. jvm执行流程

    首先给一个简单的Java示例,源代码如下: public class Main { private static int size=1; public static void main(String  ...

  3. MySQL 5.5版本解决中文乱码问题时my.ini内[mysqld]项中不能再写default-character-set=utf8

    来看看如何解决乱码问题: 在mysql中默认字符集是latin1, 想要设置字符集为uft-8,可以在 my.cnf 文件中添加以下设置: [client] default-character-set ...

  4. 如何使用 Core Plot 的 API 帮助文档

    Core Plot 可是 iOS 下绝好的图表组件,虽说它的相关资料不甚丰富,特别是中文的,英文的还是有几篇不错的文章,不过 Core Plot 自身提供的 API 帮助文档,以及代码示例其实很有用的 ...

  5. EF实体框架处理实体之间关联关系与EF延迟机制(下)

    在数据库中,表与表之间可能存在多种联系,比如,一对多,多对多的关系.当我们使用逻辑外键在数据库建立两张表之间的关系的时候,我们使用EF实体框架 必然也会将这种关系映射到我们的实体关系中来.所以,在我们 ...

  6. velocity的一些优化记录

    背景 前段时间做了个项目,主要优化一个产品页面.整个优化过程中,针对velocity的分析过程占了比较大的比重,这里做一下整理和记录. 描述 velocity版本: <dependency> ...

  7. dwz 刷新当前navtab

    List.jsp 其navtabId为TradingStrategy_31: <form method="post" action="${contextPath}/ ...

  8. Solution Explorer 和 Source Control Explorer 的 View History 异同

    如果查看别人对代码的修改,你可能会非常烦恼与在 Solution Explorer 中看历史版本看不全,如下: 实际上,你想看到的是对于整个解决方案,全部的历史版本,那应该跑去 Source Cont ...

  9. Python for everyone chapter 1

    Chapter 1 10 试题 1.  When Python is running in the interactive mode and displaying the chevron prompt ...

  10. hdu 4107 Gangster(线段树,时间卡得很严)

    这道题目的数据卡得好厉害. 题目明显是考察线段树延迟标记的,但是因为要考虑到p的值,这种延迟是有条件的:在该节点下所有的数据对于p都应该位于p的同一侧.要么都比p大,要么都比p小. 开始的时候我用一个 ...