一维数组
定义与初始化
类型 标识符[表达式];
注:标识符表示数组名,数组的地址(为后续的用指针访问数组铺垫)
即
数组元素的类型 数组名 [长度];
C++的数组下标从0开始。长度为n的数组,下标从0至n-1。
#include<iostream>
using namespace std;
int main()//显示数组函数
{
int a[5] = {1,2,3,4,5};
for (int i=0;i<sizeof(a)/sizeof(int);i++){
cout << a[i]<<" ";
}
cout << endl;
int b[] = { 1,2,3,4,5,6 };
for (int i=0;i<sizeof(b)/sizeof(int);i++){
cout << b[i];
}
system("pause");
}
访问数组
1.以下标形式访问数组
#include<iostream>
using namespace std;
int main()//计算数组元素之和
{
int total = 0;
int arr[10];
for (int i = 0; i < sizeof(arr) / sizeof(int); i++)
{
arr[i] = i;
cout << arr[i] << " ";
}
cout << endl;
for (int j = 0; j < 10;j++) {
total += arr[j];
}
cout << total;
system("pause");
}
2.以指针方式访问数组
#include<iostream>
using namespace std;
int main()//利用指针访问数组
{
int arr[5],*p;
for (int i = 0; i < 5; i++)
{
arr[i] = i;
}
for (int j = 0; j < 5; j++) {
cout << *(arr + j) << endl;//指针变量加上偏移地址指向数组地址
}
for (p = arr; p < arr + 5;p++) {
cout << *p;//指针变量间址访问数组
}
system("pause");
}
指针数组
可以使用指针数组管理分散变量的地址,通过指针数组对这些变量进行地址访问。
(根据参数的地址获得参数值的一个过程)
#include<iostream>
using namespace std;
int main()//利用指针访问数组
{
int arr[5];
int *p[5];
for (int i = 0; i < 5;i++) {
int a;
cin >> a;
arr[i] = a;
}
for (int j = 0; j < 5; j++)
{
p[j] = &arr[j];
}
for (int j = 0; j < 5; j++)
{
cout << p[j] << " ";
cout << *p[j] << endl;
}
system("pause");
}
二维数组
类型 数组名[表达式1][表达式2]
表达式1为一维长度:行
表达式2为二维长度:列
对应于数学的矩阵行列式
例如:
int a[3][4] ; //3行4列的整型数组
double b[10][10] ; //10行10列的浮点型数组
char s[40][40] ; //40行40列的字符型数组
存储格式:
访问二维数组:
1.以下标方式访问
#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
int arr[3][4];
for (int i = 0; i < 3; i++)
for (int j = 0; j < 4; j++)
cin >> arr[i][j];
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 4; j++)
cout << setw(5) << arr[i][j] << endl;//setw()函数是C++中字段宽度设置
}
system("pause");
}
2.以指针方式访问
#include<iomanip.h>
#include<iostream.h>
void main()
{ int a[3][4] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 };
int i, j, total = 0, *p, ( *pt[3] )[4];
for( p = a[0]; p < a[0]+12; p++ ) total += *p ; //以一维数组形式访问二维数组
cout << "total= " << total << endl;
for( i = 0; i<3; i++ )
{ pt[i] = a + i ;
for( j = 0; j<4; j++ )
cout << setw( 4 ) << *( *pt[i]+j ); //以指针数组访问二维数组
cout << endl;
}
}
pt是包含3个指针元素的数组,每个元素指向一个长度为4的一维整型数组。pt[0]的值是a,pt[1]的值是a+1,pt[2]的值是a+2。*pt[i]的值是a[i],pt[i]+j是第i行j列的地址,所以( *pt[i]+j )就是a[i][j]。
数组做函数参数
即把数组作为一个参数用来进行赋值或者是运算,譬如冒泡排序,选择排序等等算法的实现。
冒泡:
void bubble( int a[], int size )
{ int i, temp, work;
for ( int pass = 1; pass < size; pass++ ) //对数组排序
{ work = 1;
for ( i = 0; i<size-pass; i++ )
if ( a[i]>a[i+1] ) //相邻元素比较
{ temp = a[i]; a[i] = a[i+1]; a[i+1] = temp; work = 0; }
if( work ) break;
}
}
选择:
for ( i = 0 ; i < n - 1 ; i ++ )
{ 从a[i]到a[n-1]找最小元素a[t]
把a[t]与a[i] 交换
}
动态数组
使用new和delete来分配存储空间和动态释放已经分配的存储空间。
语法形式为:
指针变量 = new 类型(初始化值表)
指针变量 = new 基本类型 [长度]
delete 指针变量
delete [] 指针变量
new操作符返回所分配空间的首地址。由new分配的堆空间没有名字,只能通过间址方式访问。
delete收回由"指针变量"所指的内存空间。
eg:
int *p1=new int;//动态分配一个整型单元
int *p2=new char;//动态分配一个字符型单元
int *p4=new int[4];//动态分配一个整形数组
//之后,需要释放内存
delete p1;
delete p4;
eg:
#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
int *p = NULL;
p = new int;
if (p == NULL)
cout << "NULL";
else
*p = 20;
cout << *p << endl;
delete p;
system("pause");
}
用new分配数组
eg:
#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
int *p=NULL, *t,n;
cout << "输入数组大小";
cin >> n;
p = new int[n]; //分配了n个大小的地址
if (p == NULL)
{
cout << "NULL";
}
else
{
for (int i = 0; i < n; i++)
p[i] = i;
}
for (t = p; t < p+n;t++) { //p+n相当于在存储空间中移动了n个位置
cout << *t;
}
delete p; //也可以delete []p,delete收回由指针变量所指的内存空间
system("pause");
}
C++String类
C++String类的使用
添加链接描述
兄弟们记得点赞吼,也可以关注我大家一起努力