#include <stdio.h>
#include <stdlib.h>
// 数组是一块连续的内存空间 数组名 就是内存空间的首地址
// 数组名[i] == *(数组名+i);
main()
{
/* char[] arr = new char[20];
char arr[] ;
*/
// 创建一个长度为5的int类型的数组
int arr[5] ={1,2,3,4,5};
printf("a[0]=%d\n",arr[0]);
printf("a[4]=%d\n",arr[4]);
// 逻辑上是错误的代码 数组下标越界
// printf("a[5]=%d\n",arr[5]);
// windows xp 缓冲区越界补丁
// arr是一个什么东西呢?
printf("arr = %#X\n",arr);
// 回答:打印 数组的第一个元素的地址
printf("arr[0]地址 = %#X\n",&arr[0]);
// 打印数组中的第二个元素
printf("arr[1]=%d\n",arr[1]);
printf("arr[1]=%d\n", *(arr+1));
//问题: arr[i] *(arr+i) 代表的是同一个变量么?
// 代表的是同一块内存空间 指向的是同一个变量
//通过实验 : 数组名表示的 就是这个数组第一个元素 的首地址
system("pause"); // 调用windows下系统的命令 让程序暂停执行 方便观察程序的执行结果
}
#include <stdio.h>
#include <stdlib.h>
main()
{
int i =3; //天津的某个路上 盖了一个房子 3
int j =5; // 北京的某个路上 盖了一个方法 5
int* p = &i; // p 天津的门牌号
int* q = &j; // q 北京的门牌号
// 指针的运算和数组都是紧密关联的
char arr[5]={'a','b','c','d','e'}; //一块连续的内存空间
char* p1 = &arr[2];
printf("char = %c\n", *(p1-1));
// char 内存中占用 1个字节
// int 内存 中占用 4个字节
int intarr[5]={1,2,3,4,5}; //一块连续的内存空间
int* q1 = &intarr[2];
printf("char = %d\n", *(q1-1));
// 指针的运算 按照 约定好的数据类型 偏移相对应的内存空间的大小
system("pause"); // 调用windows下系统的命令 让程序暂停执行 方便观察程序的执行结果
}