一、C++数组

定义整形数组

int arrayName[5];

初始化数组

int arrayName[5]={10,20,30,40,50};
printf("arrayName[1]=%d\n",arrayName[1]);
//给数组某位赋值
arrayName[1]=3; //原来的值被替代
cout<<"arrayName=address"<<arrayName<<endl;
cout<<"arrayName[1]="<<arrayName[1]<<endl;

数组的赋值往往需要循环赋值

int arr[10];
for(int i; i<10;i++)
{
	arr[i]=i+10;
}

二、C++数组函数,传参,精细化

所有的数组都是由连续的内存位置组成。
最低的地址对应第一个元素,最高的地址对应最后一个元素

#include <iostream>
#include <iomanip>
#include <ctime>
#include <cstdio>
#include <cstdlib>

using namespace std;

void array_2(void);
//输入方式打印二维数组
void cin_array_2(void);

//指针函数实例
void pointer_array(void);

//数组传入函数实例
double averageArray(int arr[], int size);

//函数返回数组实例
int *GetRand();

//数组函数或函数数组实例
void Array_Mult(float M[4],float A[4],float B[4]);
int main(void)
{
	//定义整形数组
	//int arrayName[5];
	//初始化数组
	int arrayName[5]={10,20,30,40,50};
	printf("arrayName[1]=%d\n",arrayName[1]);
	//给数组某位赋值
	arrayName[1]=3; //原来的值被替代
	cout<<"arrayName=address"<<arrayName<<endl;
	cout<<"arrayName[1]="<<arrayName[1]<<endl;

	//数组的赋值往往需要循环赋值
	int arr[10];
	for(int i; i<10;i++)
	{
		arr[i]=i+10;
	}
	//以表格形式打印
	cout<<"序号"<<setw(10)<<"value"<<endl;

	//输出数组的每个值
	for(int j=0;j<10;j++)
	{
		cout<<setw(3)<<j<<setw(9)<<arr[j]<<endl;

	}

	//二维数组打印
	array_2();

	//输入方式打印二维数组
	cin_array_2();

	//指针函数实例
	pointer_array();


	//数组函数实例 重点是:传参地址
	int array[5]={2,3,4,5,6};
	double avg;
	cout<<"\n"<<"数组函数传参计算平均值"<<endl;
	avg = averageArray(array, 5);
	cout<<"数组的平均值:"<<avg<<endl;

	//函数返回数组地址
	cout<<"\n函数返回数组全部值:\n"<<endl;
	int *p;
	p = GetRand();
	for(int i=0; i<10; i++)
	{
		cout<<"*(p+"<<i<<"):";
		cout<<*(p+i)<<endl;
	}

	cout<<"数组函数综合实例"<<endl;
	float A[4] = { 1.75, 0.66, 0, 1.75 };
    float B[4] = {1, 1, 0, 0};
    float *M = new float[4]; //只有delete才可以释放他的空间
	Array_Mult(M,A,B);
	cout<<"函数返回的值:\n";
	cout << M[0] << " " << M[1] << endl;
    cout << M[2] << " " << M[3] << endl;
    delete[] M;

	return 0;
}

多维数组
二维数组

一个二维数组可以被认为是一个带有 x 行和 y 列的表格。下面是一个二维数组,包含 3 行和 4 列:a[3][4]

a[0][0]	a[0][1]	a[0][2]	a[0][3]
a[1][0]	a[1][1]	a[1][2]	a[1][3]
a[2][0]	a[2][1] a[2][2]	a[2][3]

初始化二维数组

int a[3][4] = 
{  
	{0, 1, 2, 3} ,    //初始化索引号为 0 的行 
	{4, 5, 6, 7} ,    //初始化索引号为 1 的行 
	{8, 9, 10, 11}     //初始化索引号为 2 的行 
};

同等赋值:12个元素

int a[3][4] = {0,1,2,3,4,5,6,7,8,9,10,11};

举例二维数组

void array_2(void)
{
	cout<<"二维数组的遍历:\n";
	// 一个带有 5 行 2 列的数组
   int a[5][2] = { {0,1}, {1,2}, {2,4}, {3,6},{4,8}};
 
   // 输出数组中每个元素的值                      
   for ( int i = 0; i < 5; i++ )
      for ( int j = 0; j < 2; j++ )
      {
         cout << "a[" << i << "][" << j << "]: ";
         cout << a[i][j]<< endl;
      }
 
}

输入方式打印二维数组

void cin_array_2(void)
{
	int n;
	cout<<"输入二维数组值:";
	cin>>n;
	int a[n][n];
	for(int i=0;i<n;i++)
	{
		for(int j=0;j<n;j++)
		{
			cin>>a[i][j];
		}
	}
	//打印
	cout<<"输入二维数组的遍历\n";
	for(int i=0;i<n;i++)
	{
		for(int j=0;j<n;j++)
		{
			cout<<a[i][j];
			cout<<endl;
		}
	}
}

C++指向数组的指针

runoobAarray 是一个指向 &runoobAarray[0] 的指针, 即数组 runoobAarray 的第一个元素的地址。
下面的程序片段把 p赋值为 runoobAarray 的第一个元素的地址:

double *p;
double runoobAarray[10];
p = runoobAarray;

指针函数实例

void pointer_array(void)
{
	//带有5个元素的双精度浮点型数组
	double doubleArray[5]={1000.0,2.0,3.4,17.3,34.5};
	double *p;

	p=doubleArray;
	//输出数组中的每个元素数组值
	cout<<"使用指针的数组值"<<endl;
	for(int i=0;i<5;i++)
	{
		cout<<"*(p+"<<i<<"):";
		cout<<*(p+i)<<endl;
	}
	cout<<"使用doubleArray作为地址的数组值"<<endl;
	for(int i=0;i<5;i++)
	{
		cout<<"*(doubleArray+"<<i<<"):";
		cout<<*(doubleArray+i)<<endl;
	}
}

三、C++传递数组给函数

C++ 传数组给一个函数,数组类型自动转换为指针类型, 因而传的实际是地址。

如果您想要在函数中传递一个一维数组作为参数, 您必须以下面三种方式来声明函数形式参数, 这三种声明方式的结果是一样的,
因为每种方式都会告诉编译器将要接收一个整型指针。 同样地,您也可以传递一个多维数组作为形式参数。

数组函数实例

double averageArray(int arr[], int size)
{
	int i,sum=0;
	double avg;
	for(i=0;i<size;i++)
	{
		sum +=arr[i];
	}
	avg = (double)sum/size;
	return avg;
}

C++ 从函数返回数组:

C++ 不允许返回一个完整的数组作为函数的参数。
但是,您可以通过指定不带索引的数组名来返回一个指向数组的指针。
如果您想要从函数返回一个一维数组,您必须声明一个返回指针的函数, 如下:

int * myFunction()
{
;
}

注重C++中函数是不能直接返回一个数组的, 但是数组其实就是指针,所以可以让函数返回指针来实现。

另外,C++ 不支持在函数外返回局部变量的地址, 除非定义局部变量为 static 变量。

函数返回数组实例

int *GetRand()
{
	//静态局部变量,可以有效保存变量地址,并且返回给主函数
	static int r[10];
	//设置时间种子
	srand((unsigned)time(NULL));
	for(int i=0; i<10; i++)
	{
		r[i] = rand()%10;
		cout<<r[i]<<endl;
	}
	return r; //返回数组的地址
}

总结:对于实参和形参,首先肯定是数据类型要匹配,
然后,传入的值:基本只有这几种:

1.普通常量
2.常量路径或文件名
3.变量地址,例如、数组地址,指针地址,字符串地址等等
4.传入函数的是函数的地址,难点:目前我也没遇到

注意:想在一个函数中,完整的返回这个数组的值, 在C++中,你必须分配动态内存,通过new关键字, 例如:char *str = new char[100];
如果不这样,在函数执行完,返回return address,的时候, 系统的资源已经被释放了。返回的值当然不正确。

再多的废话都不如一个实例

void Array_Mult(float M[4],float A[4],float B[4])
{
	M[0] = A[0]*B[0] + A[1]*B[2];
    M[1] = A[0]*B[1] + A[1]*B[3];
    M[2] = A[2]*B[0] + A[3]*B[2];
    M[3] = A[2]*B[1] + A[3]*B[3];
	cout<<"在函数内的值:\n";
    cout << M[0] << " " << M[1] << endl;
    cout << M[2] << " " << M[3] << endl;
}

在这里插入图片描述

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐