一、数组的定义
1.数组是包含给定类型的一组数据,并将这些数据依次存储在连续的内存空间中。每个独立的数据被称为数组的元素(element)。元素的类型可以是任意类型。
2.数组本身也是一个结构,其类型由它的元素类型延伸而来。更具体地说,数组的类型由元素的类型和数量所决定。
3.如果一个数组的元素是 T 类型,那么该数组就称为 “ T 数组 ”。例如,如果元素类型为 int ,那么该数组的类型就是 “ int 数组 ”。然而,int 数组类型是不完整的类型,除非指定了数组元素的数量。如果一个 int 数组有 16 个元素,那么它就是一个完整的对象类型,即 “ 16 个 int 元素数组 ”。
二、数组地址
1.数组在内存中的地址是连续的
2.C++将数组名解释为数组首个元素的地址
数组名为常量,不能更改,例如 int类型数组a使用a++ ×
但指针值可以改变,int *p = a 可以使用p++ √
3.数组第0个元素的地址等价于数组收割元素的地址
4.数组第n个元素的地址:地址首个元素 +n
5.C++编译器将 数组名[下标] 解释为 *(数组首个地址 + 下标)
'地址[下标]' 解释为 '(地址 + 下标)'
三、数组表示法与指针表示法
1.数组表示法
形式为 ***数组名[下标] ***地址形式为 ***(类型)&数组名[下标]***
int a[5]={0,4,5,8,2};
for ( int i=0 ; i < 5 ; i++ ){
std::cout << "a[i]=" << a[i] << "地址为" << (long long)&a[i] << std::endl; //使用long long类型是方便计算
}
//运行结果(相差4是因为int类型为4个字节)
a[i]=0地址为880790205704
a[i]=4地址为880790205708
a[i]=5地址为880790205712
a[i]=8地址为880790205716
a[i]=2地址为880790205720
2.指针表示法
使用指针来表示数组地址,定义形式为 `*指针名 = 数组地址(例如a或者a[下标])`
取值形式为
*(指针名+下标)
*(指针名+下标)
地址形式为
指针名+下标
指针名+下标
int a[5]={0,4,5,8,2};
int *p = a; //让指针指向数组首个元素的地址
for ( int i=0 ; i < 5 ; i++ ){
std::cout << "p=" << *(p+i) << "地址为" << (long long)(p+i) << std::endl; //使用long long类型是方便计算
}
//运行结果(相差4是因为int类型为4个字节)
p=0地址为666805205224
p=4地址为666805205228
p=5地址为666805205232
p=8地址为666805205236
p=2地址为666805205240
四、例题
1.方程求解
#include<bits/stdc++.h>
using namespace std;
int main(){
int a,b,c,x,y,count = 0;
cin>>a>>b>>c;
for(x=0;x<=1000;x++)
{
for(y=0;y<=1000;y++)
{
if(a*x+b*y == c)
{
count++;
}
}
}
cout<<count<<endl;
return 0;
}
2.奇偶数分类输出
#include<iostream>
using namespace std;
int main()
{
int n,a[40];
cin>>n;
for(int i=0; i<n ; i++)
{
cin>>a[i];
if(a[i] % 2 != 0)cout<<" "<<a[i];
}
cout<<endl;
for(int i=0; i<n ; i++)
{
cin>>a[i];
if(a[i] % 2 == 0)cout<<" "<<a[i];
}
return 0;
}
3.求最值
#include <iostream>
using namespace std;
int a[30];
int main(){
int n, min, max, i;
cin>>n;
for(i = 0; i < n; i++){
cin >> a[i];
}
//通过打擂台的方式找到最小值
max = min = a[0];
for(i = 1; i < n ; i++){
if(a[i] < min) min = a[i];
}
//通过打擂台的方式找到最大值
for(i = 1; i < n; i++){
if(a[i] > max) max = a[i];
}
cout << max << " " << min;
return 0;
}