打印数组元素的地址
要想深入的了解一下数组,那么就需要了解一下数组在内存中的存储,所以要先获取数组的地址。计算机内存地址通常是以16进制数字表示的
#include<stdio.h>
int main()
{
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
for (int i = 0; i < 10; i++)
{
printf("&arr[%d]=%p\n", i, &arr[i]); //%p是专门用来打印地址的
}
return 0;
}
我们可以发现每一位元素地址之间刚好是相差了4个字节(在VS里int类型就是占4个字节的),所以可以得到结论:数组元素在内存里是连续存放的。
利用sizeof计算数组元素的个数
sizeof这个函数是用来计算数据类型或变量所占用的内存空间大小,单位是字节(byte)。
#include<stdio.h>
int main()
{
int arr[10] = { 0 };
// sizeof(arr)表示整个数组占的总大小;sizeof(arr[0])表示一个数组元素占的字节大小
int sz = sizeof(arr) / sizeof(arr[0]);
printf("%d", sz);
return 0;
} //输出结果为10
所以以后写代码的时候数组的大小可以不用固定死啦!
C99变长数组
VS是不支持C99的变长数组的,所以在用C语言创建数组时,数组大小必须是常量或者常量表达式。这样就导致很多时候都不方便。但是在gcc编译器里支持C99。今天就展示一下这段代码。
#include<stdio.h>
int main()
{
int n = 0;
scanf("%d", &n);
int arr[n];
for (int i = 0; i < n; i++)
{
scanf("%d", &arr[i]);
}
for (int j = 0; j < n; j++)
{
printf("%d", arr[j]);
}
return 0;
}
//这一段代码在vs上运行是会报错的!