C++之数组大全初始化和赋值方法
C++之数组全能分析掌握提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录C++之数组全能分析掌握前言前言C++数组必是让很多新手头疼的一件事了,本片将详细讲解数组的概念和实例代码,小白一看就恍然大悟,话不多说,开启旅程。。。# 一、C++输入方式打印二维数组?//定义整形数组//int arrayName[5];//初始化数组int arrayName[5]={10,20,
一、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;
}
更多推荐
所有评论(0)