数组
2018/3/22 7:00
类型 数组名[ ] //方括号里的数必须是整形,常量
1. 下标从0开始
2. 数组如何初始化?
A: int a[10]={ } //大括号里不写值初始化值为0;不写,初始化为随机数
Int b[] = {1,2,3,4,5,6,7,}
编译,链接,执行(编译时得到数组大小)
X = sizeof(b) :结果:28
数组空间大小的算法:sizeof(b)/sizeof(b[0]) 与数组元素个数是有一定区别的,谨记
结论:1.数组名不代表地址,代表首元素的地址
2.数组名代表整个数组的大小(在sizeof中)
3. 编译和执行有什么差别?
4. 数组的访问?
5. 数组名++?数组名+1?
不允许做++等赋值工作,数组大小的固定的,数组名代表首元素地址,是常量值,自身不可以被改变
数组名+1是可以的,因为没有改变数组,自加改变了数组。
- 下面有一段代码,大家可以不运行,看看应该输出什么?很有意思
#include <stdio.h>
#include <string.h>
int main() {
int a[5]={1,2,3,4,5};
int *p=a;
printf("p = %p\n",p);
int *ptr = (int *)(&a+1);
printf("&a=%p &(a[4])=%p \n",&a ,&(a[4]));
printf("ptr=%p\n",ptr);
printf("ptr-1=%p\n",ptr-1);
printf("%d %d\n",*(a+1),*(ptr-1));
printf("sizeof(ptr-1) = %d\n",sizeof(ptr-1));
return 0;
}
关键在于 a+1 和&a+1 加1到底加了多少,加的是什么?
a+1:数组元素的移动:首地址 + 一个数组元素的大小
&a+1: 其实加的整个数组大小:首地址 + 数组长度*数组元素大小