C++浅谈数组

一维数组

定义与初始化
类型 标识符[表达式];
注:标识符表示数组名,数组的地址(为后续的用指针访问数组铺垫)

数组元素的类型 数组名 [长度];
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类的使用
添加链接描述

兄弟们记得点赞吼,也可以关注我大家一起努力

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

麒麟NG

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值