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. HDU-1011 Starship Troopers (树形DP+分组背包)

    题目大意:给一棵有根带点权树,并且给出容量.求在不超过容量下的最大权值.前提是选完父节点才能选子节点. 题目分析:树上的分组背包. ps:特判m为0时的情况. 代码如下: # include<i ...

  2. Andoid 利用ndk-stack定位崩溃代码

    Android NDK自从版本R6开始, 提供了一个工具ndk-stack( 在目录{ndk_root}/中 ). 这个工具能自动分析dump下来的crash log, 将崩溃时的调用内存地址和c++ ...

  3. C# WinForm获取当前路径汇总

    摘自:http://greatverve.cnblogs.com/archive/2011/12/15/winform-path.html Winform获取应用程序的当前路径的方法集合,具体如下,值 ...

  4. kuangbin_ShortPath F (POJ 3259)

    判环模板题 有了上一题的经验过得很轻松 除了因为spfa还不是很熟打错了两个字母 然后debug了一小会 #include <iostream> #include <string&g ...

  5. (转) 实时SLAM的未来及与深度学习的比较

          首页 视界智尚 算法技术 每日技术 来打我呀 注册     实时SLAM的未来及与深度学习的比较 The Future of Real-Time SLAM and “Deep Learni ...

  6. dictEntry **table;

    typedef struct dictht { dictEntry **table; PORT_ULONG size; PORT_ULONG sizemask; PORT_ULONG used;} d ...

  7. C/C++数组名与指针的区别详解

    1.数组名不是指针我们看下面的示例: #include <iostream> int main() { ]; char *pStr = str; cout << sizeof( ...

  8. jQuery Ajax请求提交 后台getParameter接收不到数据

    今天遇到的问题,总结一下 jQuery的$ajax({ contentType:"application/json",  //发送信息至服务器时内容编码类型. }) 这样的方式提交 ...

  9. css设置透明度

    使用新的CSS3的"RGBA"声明,不仅仅让我们像通常一样设置RGB颜色,而且还可以设置其透明度. RGBA像RGB一样设置颜色,而这个"A"--RGBA中的最 ...

  10. OpenJudge计算概论-称体重【枚举法、信息数字化】

    /*====================================================================== 称体重 总时间限制: 1000ms 内存限制: 655 ...