数组的特点:
1. 放在一块连续的内存空间中
2. 数组中每个元素都是相同的数据类型
我们可以通过下标访问数组中的元素
#include
using namespace std;
int main()
{
// 数组的学习
// 3钟定义的形式
// 1.数据类型 数据名【数组长度】
int array[5];
array[0] = 10;
array[1] = 20;
array[2] = 30;
array[3] = 40;
array[4] = 50;
// 2. 数据类型 数组名【数组长度】 = {值1,值2}
int array2[5] = {1,2,3,4}; // 如果初始化的时候,没有全部写完,会用0填充
// 3.数据类型 数组名【】 = {值1,值2}
// 定义数组时,必须有初识的长度
int array3[] = {11,22}; //以1,2,3填充
// 访问数组中的元素
for(int i=0;i<5;i++){
cout << array[i] << endl;
cout << array2[i] << endl;
cout << array3[i] << endl;
cout << "========" << endl;
};
return 0;
}
一维数组名称的用途:
1. 可以统计整个数组在内存中的长度
2. 可以获取数组在内存中的首地址
#include
using namespace std;
int main()
{
// 数组的学习
int array[5] = { 1, 2, 3, 4, 5 };
// 统计数组的长度
cout << sizeof(array) << endl; // 20 ,一个int占4字节,5个一个20字节
// 统计数组中某一个元素所占的空间
cout << sizeof(array[0]) << endl; // 4 ,获取到4个字节,
//计算数组的个数
// cout << "计算数组的个数 = " << sizeof(array) / sizeof(array[0]) << endl; // 5
cout << sizeof(&array) << endl; // 对数组取地址,获取到数组指针,32位系统占4字节,64占8字节。面试题。
cout << sizeof(*array) << endl; // 对数组取*,获取到数组的第一个数据,int,占4字节。面试题。
return 0;
}
#include
using namespace std;
int main()
{
// 数组的学习
int array[5] = {1,2,3,4,5};
// 统计数组的长度
cout << sizeof(array) << endl; // 20 ,一个int占4字节,5个一共20字节
// 统计数组中某一个元素所占的空间
cout << sizeof(array[0]) << endl; //4 ,获取到4个字节,
//计算数组的个数
cout << "计算数组的个数 = " << sizeof(array)/sizeof(array[0]) << endl; //5
// 可以通过数组名查看数组的首地址
cout << "数组的首地址(十六进制)" << array << endl; // 结果是:十六进制数
cout << "一个元素的首地址" << (long long)&array[1] << endl; // 查看首地址
// cout << "数组的首地址(十进制)=" << int(array) << endl; // 根据视频,我的这里会报错:指针转换到较小的类型会丢失信息。
// 根据弹幕,大家都是这样写
cout << "数组的首地址(十进制)" << (long long)array << endl; // 结果是:十六进制数
// 百度结果:可以用C的printf()函数,似乎结果不对
printf("数组array的地址是:%d!\n",array);
printf("数组array的地址是:%d!\n",&array);
return 0;
}
数组名是一个常量,不可以进行赋值的操作
练习案例:五只小猪称重
案例描述:
在一个数组中记录了五只小猪的体重,如:int array[5] = {300,20,120,320,21};
找出并打印最重的小猪。
#include
using namespace std;
int main()
{
// 五只小猪称重
int array[5] = {300,20,120,320,21};
int x = array[0]; //定义一个值,先保存第一位,以此进行比较
for(int i=0;i < int(sizeof(array)/sizeof(array[0]));i++)
{
// 1. 使用三目运算符
(array[i]>x?x = array[i]:x);
// x = (array[i]>x?array[i]:x);
// 2.使用循环
/*
if (array[i]>x)
{
x = array[i];
}
*/
};
cout << "最大值是" << x << endl;
return 0;
}
练习案例:数据元素逆置
案例描述:
请声名一个5个元素的数组,并将其逆置。
如原数组为1,2,3,4,5,则逆置后输出5,4,3,2,1。
#include
using namespace std;
int main()
{
// 数组逆置
int array[] = {1,2,3,4,5};
// 保存数组的起始和结束的下边
int start = 0;
int end = sizeof(array)/sizeof(array[0])-1;
cout << "开始的下标" << start << endl;
cout << "结束的下标" << end << endl;
// 1.利用while循环进行逆置
while(start <= end)
{
int temp;
temp = array[start];
array[start] = array[end];
array[end] = temp;
start++;
end--;
}
cout << "排序结束" << endl;
for(int i = 0;i<5;i++)
{
cout <
#include
using namespace std;
int main()
{
// 冒泡排序
// 排序的总轮数:元素个数-1
// 每轮对比次数:元素个数 -排序轮数 -1
int array[5] = {21,1,324,435,20};
for(int j=0;j<5-1;j++){
for(int i=0;i<5-j-1;i++)
{
if(array[i]>array[i+1])
{
int temp = array[i];
array[i] = array[i+1];
array[i+1] = temp;
}
}
}
// 排序后打印结果
for(int i=0;i<5;i++)
{
cout << array[i] << endl;
}
return 0;
}
#include
using namespace std;
int main()
{
//设置随机数种子
srand((int)time(NULL));
// 二维数据
//定义1
int array[2][3];
array[0][0] = 1;
for(int i=0;i<2;i++)
{
for(int j=0;j<3;j++)
{
array[i][j] = rand()%100; // 取得 [ 0 , 10 ) 的随机整数:rand()%10 ;
}
}
//定义2
int array1[2][3] = {{1,2,3},{4,5,6}};
// 定义3
int array2[2][3] = {1,2,3,4,5,6}; // 不建议使用
// 定义4
int array3[][3] = {1,2,3,4,5,6}; //可以省略行,不可以省略列
// 打印二维数组
cout << "打印二维数组" << endl;
cout << "随机数"<< rand()%100 << endl;
for(int i = 0;i<2;i++)
{
for(int j = 0;j<3;j++)
{
cout << array[i][j] << endl;
}
}
return 0;
}
查看二维数组的空间
获取二维数组的地址
数组中的地址是连续的,间隔是每个元素的大小。
#include
using namespace std;
int main()
{
// 案例
string name[3] = {"张三","李四","王五"};
int array[3][3] = {{100,100,100},{90,50,100},{30,70,80}};
for(int i=0;i<3;i++){
int score =0;
for(int j=0;j<3;j++)
{
score += array[i][j];
cout << array[i][j] << endl;
}
cout << "第" << i << "的成绩" << score << endl;
cout << name[i] << "成绩=" << score << endl;
}
return 0;
}
面试题
#include
using namespace std;
void test01()
{
char(*p)[3] = new char[2][3];
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 3; j++) {
p[i][j] = 'a';
}
}
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 3; j++) {
cout << p[i][j] << " ";
}
cout << endl;
}
delete[] p;
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 3; j++) {
cout << p[i][j] << " ";
}
cout << endl;
}
}
void test02()
{
char** pp = new char*[2]; //二级指针为创建new一级指针的指针
for (int i = 0; i < 2; i++) {
pp[i] = new char[3]; // pp[2][3]
}
//赋值
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 3; j++) {
pp[i][j] = 'v';
}
}
//打印
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 3; j++) {
cout << pp[i][j] << " ";
}
cout << endl;
}
//销毁
for (int i = 0; i < 2; i++) {
delete[] pp[i];
}
delete[] pp;
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 3; j++) {
cout << pp[i][j] << " ";
}
cout << endl;
}
}
int main()
{
// test01();
test02();
}