c++学习-数组
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++学习-数组的更多相关文章
- php学习-数组(一)
数组函数可以对大量性质相同的数据进行存储,排序,插入及删除等操作. 学习任务: 声明数组,输出数组,遍历数组,查询数组中指定元素,获取数组中的最后一个元素. 删除数组中重复的元素.统计数组中元素的个数 ...
- Shell脚本学习-数组
跟着RUNOOB网站的教程学习的笔记 Shell数组 数组中可以存放多个值,Bash Shell只支持一维数组(不支持多维数组),初始化时不需要定义数组大小(与PHP类似). 与大部分编程语言类似,数 ...
- 09-java学习-数组-冒泡排序-选择排序-数组工具类编写-查找-扩容
数组的排序算法 查找算法 数组协助类Arrays的学习和使用 数组的扩容
- Knockout.Js官网学习(数组observable)
前言 如果你要探测和响应一个对象的变化,你应该用observables. 如果你需要探测和响应一个集合对象的变化,你应该用observableArray . 在很多场景下,它都非常有用,比如你要在UI ...
- Scala学习——数组/映射/元组
[<快学Scala>笔记] 数组 / 映射 / 元组 一.数组 1.定长数组 声明数组的两种形式: 声明指定长度的数组 val 数组名= new Array[类型](数组长度) 提供数组初 ...
- Java学习-数组
1.数组的是Object的直接子类,它属于“第一类对象”,但是它又与普通的java对象存在很大的不同,类名为:[I 一维数组:[I 二维数组:[[I 三维数组:[[[I 2.[代表了数组的维度,一个[ ...
- java学习——数组
元素类型[] 数组名 = new 元素类型[元素个数或数组长度]; array 为引用数据类型|-数组数据类型 | 内存结构:程序在运行时,需要在内存中的分配空间.为了提高运行的效率,有对空间进行不同 ...
- Java小知识点学习--------数组和位运算小知识点
位运算符: >>>无符号右移运算符,无符号右移的规则和右移的规则同样,仅仅是在填充时,无论原来是正数还是负数都用0来补充. 数组: arr1=arr2; 此时两个数组变量都会同一时 ...
- Scala学习---数组
1.编写一段代码,将a设置为一个n个随机整数的数组,要求随机数介于0(包含)和n(不包含)之间 /** * Created by vito on 2017/1/11. */ object ex1 { ...
随机推荐
- java jfinal + ajaxfileupload.js 上传
功能上传 需求:同时上传多张图片 前端:jquery.ajaxfileupload.js 后端:jfinal upload.htm <html> <body> <div ...
- 套接字I/O模型-select
共有6种类型套接字I/O模型.blocking(阻塞),select(选择),WSAAsyncSelect(异步选择),WSAEventSelect(事件选择),overlapped(重叠),comp ...
- pgbouncer配置
DESCRIPTION pgbouncer is a PostgreSQL connection pooler. Any target application can be connected to ...
- WCF入门教程一[什么是WCF]
一.概述 Windows Communication Foundation(WCF)是由微软发展的一组数据通信的应用程序开发接口,可以翻译为Windows通讯接口,它是.NET框架的一部分.由 .NE ...
- javascript语法体系
5 代表此属性ECMAScript 5(一般IE9+)才支持. 图解:-- 图解: undefined,null,NaN Infinity ECMAScript 5禁止修改 每个函数 ...
- 虚拟化之vmware-截图解释
故障检测和主机网络隔离 代理会相互通信,并监控群集内各台主机的活跃度.默认情况下,此操作通过每秒交换一次检测信号来完成.如 果15 秒过去后仍未收到检测信号,而且 ping 不到该主机,则系统会声明该 ...
- linux服务之svn
架构:c/s 开发语言:python 服务器端:在linux平台下部署 客户端:分gui与cli两种操作界面 相关包: http://blog.sina.com.cn/s/blog_53b95aec0 ...
- Spring和SpringMVC的区别
spring 是是一个开源框架,是为了解决企业应用程序开发,功能如下◆目的:解决企业应用开发的复杂性◆功能:使用基本的JavaBean代替EJB,并提供了更多的企业应用功能◆范围:任何Java应用简单 ...
- mysql 查看最大连接数 设置最大连接数
方法一:进入MYSQL安装目录 打开MYSQL配置文件 my.ini 或 my.cnf查找 max_connections=100 修改为 max_connections=1000 服务里重起MY ...
- eclipse svn subclipse下载地址
http://subclipse.tigris.org/servlets/ProjectDocumentList?folderID=2240 Eclipse 3.x Subclipse release ...