C / C ++语言中的数组讲解,C / C ++语言数组
数组是存储在连续内存位置的项的集合,这个想法是将多个相同类型的项声明在一起。
数组声明:
在C中,我们可以通过指定它的大小或通过初始化或者两者来声明数组。
-
// Array declaration by specifying size
-
int arr[10];
-
Run on IDE
-
// Array declaration by initializing elements
-
int arr[] = {10, 20, 30, 40}
-
-
// Compiler creates an array of size 4.
-
// above is same as "int arr[4] = {10, 20, 30, 40}"
-
Run on IDE
-
// Array declaration by specifying size and initializing
-
// elements
-
int arr[6] = {10, 20, 30, 40}
访问数组元素:
使用整数索引来访问数组元素,数组索引从0开始,直到数组的大小减去1.以下是几个例子。
-
int main()
-
{
-
int arr[5];
-
arr[0] = 5;
-
arr[2] = -10;
-
arr[3/2] = 2; // this is same as arr[1] = 2
-
arr[3] = arr[0];
-
-
printf("%d %d %d %d", arr[0], arr[1], arr[2], arr[3]);
-
-
return 0;
-
}
Output:
5 2 -10 5
无索引越界检查:
C中没有任何索引不合格检查,例如以下程序编译正常,但运行时可能会产生意外的输出。
-
int main()
-
{
-
int arr[2];
-
-
printf("%d ", arr[3]);
-
printf("%d ", arr[-2]);
-
-
return 0;
-
}
此外,在C中,初始化具有指定大小的元素的数组不是编译器错误, 例如下面的程序编译好。
-
int main()
-
{
-
-
// Array declaration by initializing it with more
-
// elements than specified size.
-
int arr[2] = {10, 20, 30, 40, 50};
-
-
return 0;
-
}
该程序用C ++编译不能通过,如果我们将上述程序保存为.cpp,程序将生成编译器错误“错误:'int [2]'的初始化程序太多。
再给读者显示一下数组元素存储在连续的位置代码展示:
-
int main()
-
{
-
// an array of 10 integers. If arr[0] is stored at
-
// address x, then arr[1] is stored at x + sizeof(int)
-
// arr[2] is stored at x + sizeof(int) + sizeof(int)
-
// and so on.
-
int arr[5], i;
-
-
printf("Size of integer in this compiler is %u\n", sizeof(int));
-
-
for (i=0; i<5; i++)
-
// The use of '&' before a variable name, yields
-
// address of variable.
-
printf("Address arr[%d] is %u\n", i, &arr[i]);
-
-
return 0;
-
}
Output:
Size of integer in this compiler is 4
Address arr[0] is 2686728
Address arr[1] is 2686732
Address arr[2] is 2686736
Address arr[3] is 2686740
Address arr[4] is 2686744这些都是程序运行的一些小技术点,希望对读者有所帮组。。。。。。。