int a[10]; //是个元素,在windows下回报错,linux会输出一个随机数

int a[10]={1,2}; //初始化,其他的为0

数组越界:

为了调高效率, 编译器不会对数组越界做检查

#include <iostream>
using namespace std; int main()
{ int b[];
int a[];
b[] = ; cout<<b[]<<endl;
cout<<a[]<<endl; return ;
}

int a[10]; // 自动生成一个指针,该指针指向数组的第一个元素的地址  int *a=&a[0];

数组的传递:

void test(int []);//简要数组声明
void test(int [10]);//标准数组声明
void test(int *a);//指针声明

数组对象:

#include<iostream>
using namespace std; class area{
public:
area(){}
area(int w, int h){ this->w = w; this->h = h; cout << "gouzao" << endl; }
~area(){ cout << "xigou" << endl; }
int get()
{
return w*h;
}
private:
int w;
int h;
}; int main()
{
area a[] = {area(,),area(,)}; cout << a[].get() << endl; return ; }

指针数组:

#include<iostream>
using namespace std; class area{
public:
area(){ cout << "gouzao:" <<endl; }
area(int i){ this->i = i; cout << "gouzao:" << i << endl; }
area(int w, int h){ this->w = w; this->h = h; cout << "gouzao" << endl; }
~area(){ cout << "xigou "<<i << endl; }
int get()
{
return w*h;
}
private:
int w;
int h;
int i;
}; int main()
{
area *p[];//指针数组
int i;
for (i = ; i < ; ++i)
{
p[i] = new area(i);
} //释放内存
for (i = ; i < ; ++i)
{
delete p[i];
} return ; }

优化后:

#include<iostream>
using namespace std; class area{
public:
area(){ cout << "gouzao:" <<endl; }
area(int i){ this->i = i; cout << "gouzao:" << i << endl; }
area(int w, int h){ this->w = w; this->h = h; cout << "gouzao" << endl; }
~area(){ cout << "xigou "<<i << endl; }
int get()
{
return w*h;
}
void set(int w, int h)
{
this->w = w;
this->h = h;
}
private:
int w;
int h;
int i;
}; int main()
{ area *p = new area[]; //在堆中创建连续的五个对象,并将第一个对象的地址赋值给指针 p
int i; for (i = ; i < ; i++)
{
p[i].set(i,i);
} delete []p; //特有的删除方式 return ; }

枚举常量和数组:

int main()
{ enum day{mon, tue, wen, thur ,fri,sat, sun};
double tempature[sun + ] = { , , , , , , }; int i;
for (i = ; i <= sun; i++)
{
cout << "xingqi " << i << "\t" << "qiwen:" << tempature[i] << endl;
} }

有 \0 直接输出数组名即可

int main()
{ char c[] = {'a','b', '\0'}; //cout << sizeof(c) << endl;
cout << c << endl; return ; }
int main()
{ char c[]; //cin >> c; //不检查是否越界,遇到空格会结束
//gets(c); //不检查是否越界,会接收所有的字符
cin.get(c,);//解决上面问题 cout << sizeof(c) << endl;
//cout << (int)c[2] << endl;
//cout << (int)c[0] << endl; return ; }

strcat

int main()
{ char a[] = "ab";//注意第一个要足够的大
char b[] = "cd"; strcat(a, b); //连接时第一个字符串末尾的 '\0' 会自动去掉 cout << a << endl;
cout << sizeof(a) << endl; return ; }

strcpy

int main()
{ char a[] = "ab";
char b[] = "cd"; strcpy(a,b); //b可以是一个字符串,注意a要足够大
//strcpy(a, "def"); cout << a << endl;
cout << sizeof(a) << endl; return ; }

strcmp

int main()
{ char a[] = "ab";
char b[] = "ab"; if (strcmp(a, b) == ) // strcmp("a", "b")
{
cout << "equal"<<endl;
} return ; }

重载[]运算符解决数组越界问题:

class A{
public:
A(int len){ this->len = len; p = new char[len]; }
~A(){ delete[]p; p = ; }
char & operator[](int i)
{
if (i< || i>=len)
{
cout << "越界" << endl;
return *(p + len - );
}
else{
return *(p + i);
}
}
private:
int len;
char *p; }; int main()
{
A a(); int i;
char *p = "abcdefghkjklmn";
for (i = ; i < ; ++i)
{
a[i] = *(p + i);
} for (int j = ; j < ; j++)
{
cout << a[j] << endl;
} return ; }

c++学习-数组的更多相关文章

  1. php学习-数组(一)

    数组函数可以对大量性质相同的数据进行存储,排序,插入及删除等操作. 学习任务: 声明数组,输出数组,遍历数组,查询数组中指定元素,获取数组中的最后一个元素. 删除数组中重复的元素.统计数组中元素的个数 ...

  2. Shell脚本学习-数组

    跟着RUNOOB网站的教程学习的笔记 Shell数组 数组中可以存放多个值,Bash Shell只支持一维数组(不支持多维数组),初始化时不需要定义数组大小(与PHP类似). 与大部分编程语言类似,数 ...

  3. 09-java学习-数组-冒泡排序-选择排序-数组工具类编写-查找-扩容

    数组的排序算法 查找算法 数组协助类Arrays的学习和使用 数组的扩容

  4. Knockout.Js官网学习(数组observable)

    前言 如果你要探测和响应一个对象的变化,你应该用observables. 如果你需要探测和响应一个集合对象的变化,你应该用observableArray . 在很多场景下,它都非常有用,比如你要在UI ...

  5. Scala学习——数组/映射/元组

    [<快学Scala>笔记] 数组 / 映射 / 元组 一.数组 1.定长数组 声明数组的两种形式: 声明指定长度的数组 val 数组名= new Array[类型](数组长度) 提供数组初 ...

  6. Java学习-数组

    1.数组的是Object的直接子类,它属于“第一类对象”,但是它又与普通的java对象存在很大的不同,类名为:[I 一维数组:[I 二维数组:[[I 三维数组:[[[I 2.[代表了数组的维度,一个[ ...

  7. java学习——数组

    元素类型[] 数组名 = new 元素类型[元素个数或数组长度]; array 为引用数据类型|-数组数据类型 | 内存结构:程序在运行时,需要在内存中的分配空间.为了提高运行的效率,有对空间进行不同 ...

  8. Java小知识点学习--------数组和位运算小知识点

    位运算符: >>>无符号右移运算符,无符号右移的规则和右移的规则同样,仅仅是在填充时,无论原来是正数还是负数都用0来补充. 数组: arr1=arr2;  此时两个数组变量都会同一时 ...

  9. Scala学习---数组

    1.编写一段代码,将a设置为一个n个随机整数的数组,要求随机数介于0(包含)和n(不包含)之间 /** * Created by vito on 2017/1/11. */ object ex1 { ...

随机推荐

  1. 黑马程序员——JAVA基础之多线程的线程间通讯等

    ------- android培训.java培训.期待与您交流! ---------- 线程间通讯: 其实就是多个线程在操作同一个资源,但是动作不同. wait(); 在其他线程调用此对象的notif ...

  2. Vimdiff---VIM的比较和合并工具

    本文来自IBMDW   http://www.ibm.com/developerworks/cn/linux/l-vimdiff/ 源程序文件(通常是纯文本文件)比较和合并工具一直是软件开发过程中比较 ...

  3. ps调色技能

    色相/饱和度: 色相->当你看到一种颜色,你会很快的辨别他为什么颜色,比如说红色,绿色,黄色.选中某种颜色然后调整色相. 饱和度->色彩艳丽程度. 明度->调整图片暗亮 曲线:暗亮调 ...

  4. log tree(merge)

    http://www-users.cs.umn.edu/~he/diff/p256-severance.pdf http://www.eecs.harvard.edu/~margo/cs165/pap ...

  5. 委托,C#本身的委托(Action Func)

    1.Action 分为带泛型的和不带泛型的,带泛型可传入任何类型的参数. 格式如下: using System; using System.Collections.Generic; using Sys ...

  6. risc与cisc

    RISC(精简指令集计算机)和CISC(复杂指令集计算机)是当前CPU的两种架构.它们的区别在于不同的CPU设计理念和方法. 早期的CPU全部是CISC架构,它的设计目的是要用最少的机器语言指令来完成 ...

  7. 虚拟化之esxi命令行管理

    Vmware PowerCLI和Vmware CLI vMA A Linux virtual appliance that includes the vSphere SDK for Perl and ...

  8. linux中Zabbix邮件报警设置配置步骤

    使用外部邮箱账号发送报警邮件设置 配置Zabbix服务端外部邮箱 vi /etc/mail.rc #编辑,添加以下信息 set from=xxx@163.com smtp=smtp.163.com s ...

  9. ActionContext详解

    ActionContext    ActionContext是Action的上下文,Struts2自动在其中保存了一些在Action执行过程中所需的对象,比如session, parameters, ...

  10. Ext is not defined

    最近由于项目设计到Extjs所以也准备研究一下,可是谁知道刚写好一个demo,运行的时候死活出不来界面,于是用firebug看了一下,出现:Ext is not defined,因为刚开始学也不知道是 ...