在C++编程中,short数组和short int数组是存储短整型数据的常用结构,两者的底层类型本质一致,short是short int的简写形式。接下来将详细介绍它们的初始化方式以及常见用法。
short数组的基础定义
short类型通常占用2个字节的内存空间,取值范围一般是-32768到32767,适合存储数值范围较小的整数数据,能够节省内存开销。定义short数组的语法和定义其他类型数组没有区别,示例代码如下:
#include <iostream>
using namespace std;
int main() {
// 定义长度为5的short数组
short arr[5];
// 定义short int数组,和short数组等价
short int arr2[5];
return 0;
}
short数组的初始化方法
1. 完全初始化
在定义数组的同时直接给所有元素赋值,这种方式会为每个元素指定初始值,未被显式赋值的元素会自动初始化为0(如果是全局数组或静态数组)或者不确定值(如果是局部非静态数组)。
#include <iostream>
using namespace std;
int main() {
// 完全初始化,给数组的5个元素都赋值
short numArr[5] = {10, 20, 30, 40, 50};
// 遍历输出数组元素
for (int i = 0; i < 5; i++) {
cout << "numArr[" << i << "] = " << numArr[i] << endl;
}
return 0;
}
2. 部分初始化
如果初始化的元素数量少于数组定义的长度,那么剩余的元素会自动初始化为0,这是C++的标准特性。
#include <iostream>
using namespace std;
int main() {
// 只初始化前3个元素,后2个元素自动为0
short numArr[5] = {1, 2, 3};
for (int i = 0; i < 5; i++) {
cout << "numArr[" << i << "] = " << numArr[i] << endl;
}
return 0;
}
3. 省略数组长度的初始化
定义数组时可以不指定长度,编译器会根据初始化列表的元素数量自动推导数组的长度,这种方式在元素数量不确定的场景下非常实用。
#include <iostream>
using namespace std;
int main() {
// 不指定数组长度,编译器自动推导长度为4
short numArr[] = {100, 200, 300, 400};
// 通过sizeof计算数组长度
int len = sizeof(numArr) / sizeof(numArr[0]);
cout << "数组长度为:" << len << endl;
for (int i = 0; i < len; i++) {
cout << "numArr[" << i << "] = " << numArr[i] << endl;
}
return 0;
}
4. 循环初始化
如果需要按照特定规则给数组赋值,比如等差数列,可以使用循环的方式完成初始化,这种方式灵活性更高。
#include <iostream>
using namespace std;
int main() {
short numArr[5];
// 循环赋值,元素值为索引的2倍
for (int i = 0; i < 5; i++) {
numArr[i] = i * 2;
}
for (int i = 0; i < 5; i++) {
cout << "numArr[" << i << "] = " << numArr[i] << endl;
}
return 0;
}
5. memset初始化
如果需要将数组的所有元素初始化为同一个值,可以使用memset函数,不过要注意memset是按字节赋值的,对于short类型初始化为0是安全的,初始化为其他值可能出现不符合预期的结果。
#include <iostream>
#include <cstring>
using namespace std;
int main() {
short numArr[5];
// 将数组所有字节初始化为0,每个short元素都会是0
memset(numArr, 0, sizeof(numArr));
for (int i = 0; i < 5; i++) {
cout << "numArr[" << i << "] = " << numArr[i] << endl;
}
return 0;
}
short int数组的用法注意事项
short int数组和short数组完全等价,使用时没有区别,但是要注意避免数组越界访问,否则会导致程序出现未定义行为。另外如果short数组作为函数参数传递,会退化为指针,无法直接通过sizeof获取数组长度,需要额外传递长度参数。
#include <iostream>
using namespace std;
// 数组作为函数参数,需要传递长度
void printShortArr(short* arr, int len) {
for (int i = 0; i < len; i++) {
cout << "arr[" << i << "] = " << arr[i] << endl;
}
}
int main() {
short int numArr[] = {5, 6, 7, 8, 9};
int len = sizeof(numArr) / sizeof(numArr[0]);
printShortArr(numArr, len);
return 0;
}