变长数组
C99 标准中引用一个概念:变长数组
支持数组创建的时候,用变量指定大小的,但是这个数组不能初始化
gcc :支持C99,可以用变量定义数组大小
VS2019不支持C99中变长数组的
字符串结束符
#include <stdio.h>
int main()
{
char str1[] = "abc"; //内存存放:abc\0
char str2[] = {'a','b','c'}; //内存存放:abc
printf("%s\n",str1); //bit
printf("%s\n",str2); //bit烫烫烫烫烫烫
return 0;
}
str1数组初始化时用" ",会在字符串后面加上’\0’,所以是4个字节
str2数组初始化时用大括号,并不会在最后放’\0’,所以是3个字节,而且通过%s打印是有错误的,因为不知道在哪里遇到’\0’结束符,所以
打印出的内存里的数据是乱码,直到遇到’\0’才停下
用strlen函数求长度时,str1是3,str2是随机值
数组在内存中的存放
数组在内存中是连续存放的!
随着数组下标的增长,地址是由低到高变化的!
二维数组在内存中也是连续存放的!
一行内部连续,跨行也是连续的!
数组名
数组名是数组首元素的地址
但是有2个例外
- sizeof(数组名):数组名表示整个数组,计算的是整个数组的大小,单位是字节
- &数组名:数组名表示整个数组,取出的是整个数组的地址,如&arr,当&arr+1时,打印的是相隔arr数组大小的地址
除此之外,所有的数组名都是数组首元素的地址
类型
int arr [10];
数组元素类型:int
arr数组的类型是:int [10]