1.数组的地址就第一个元素的地址
2.数组是一块连续的存储空间
3.下标小的元素在小地址上,下标大的元素在大地址上
2.数组是一块连续的存储空间
3.下标小的元素在小地址上,下标大的元素在大地址上
4.数组的地址就是数组所占存储空间的首地址
void test(){
// 数组的地址就第一个元素的地址
// 数组是一块连续的存储空间
// 下标小的元素在小地址上,下标大的元素在大地址上
// 数组的地址就是数组所占存储空间的首地址
int arr[3] = {1,2,3}; //int类型占4个字节,内含3个元素,就开辟了12个字节的内存
printf("%p\n",arr); //数组名本身就是一个地址
printf("%p\n",&arr[0]); //arr数组的地址跟元素arr[0]的地址相同 比如地址为:0xffff8c
printf("%p\n",&arr[1]); //地址为 0xffff90 每个元素占4个字节
printf("%p\n",&arr[2]); //地址为 0xffff94 下标小的元素在小地址上,下标大的元素在大地址上
}
void test2(){
//内存的开辟都是从大地址开始分配,然后再分配小地址
char a[1] = {'1'};
printf("%p\n",a); //地址0x7fff5fbff78f
char b[1] = {'2'};
printf("%p\n",b); //地址0x7fff5fbff78e
}
int main(int argc, const char * argv[]) {
// 第一个注意点:不要数组下标月界,数组下标越界导致的问题:
// 1、约错了对象:访问不该你访问的元素,导致莫名的错误
// 2、程序崩溃
// 第二注意点:使用变量作为元素个数不可以进行整体赋值
// 第三个注意点:整体赋值只有在数组定义的时候才可以,也就说数组定义后不可以使用整体赋值方式对数组元素进制赋值。
char a[1] = {'1'};
//a[1] = 2; 1.不能这么写,因为b只有下标为0的元素,没有下标1的元素,造成下标越界
//a[10000000] = 2; 2.会造成程序崩溃
int arr[3];
//arr = {1,2,3}; 整体赋值只能在定义的同时进行赋值
return 0;
}