一、数组名的含义
在C/C++中,数组名就是地址,即数组在内存中的位置,它表示第一个元素的地址(首地址)
int arr[4]={1,2,3,4};
int* p=arr;//arr本身的类型就是int*
相当于int *p=&arr[0];//第一元素的地址
二、指针的加减法
指针加法:后移n个元素
指针减法:前移n个元素
三、用p指向数组中arr的任意一个元素
例如:指向arr[3]
第一种方法:p=arr+3;
第二种方法:p=&arr[3];
四、给数组元素赋值
第一种方法:arr[3]=10;
第二种方法:*(arr+3)=10;
或p=arr+3; *p=10;
五、指针与数组的关系
把p可以当成数组使用
int* p = &arr[1];
p[0] = 0xAA; // p[0]: 自p开始的第0号元素, 即arr[1]
p[1] = 0xBB; // p[1]: 即arr[2]
------------------------
int a = 10;
int* p = &a;
p[0] = 11; // 长度为1的数组
六、数组的遍历
第一种方法:
int arr[4];
for(int i=0; i<4; i++)
{
printf(“%d \n”, arr[i]);
}
第二种方法:
int arr[4];
for(int* p= arr; p<arr+4; p++) // 注: arr+4
{
printf(“%d \n”, *p);
}
七、越界访问
int arr[4] = {1,2,3,4};
arr[4] = 10; //运行时错误!
注:错误分为编译错误和运行错误。编译错误由编译检查,属于语法上的错误。运行错误只有在运行时才出错,一般会导致程序崩溃。
使用指针访问数组元素时,也不能越界。
int* p = arr;
* (p + 4) = 10; // 运行时错误!// 严重的隐惑
八、直接把数组成看一块内存就可以了。数组名就是这块内存的地址。 然后通过指针来访问它就可以了。
九、小结
数组名:本身就是内存地址, 第一个元素的地址
数组和指针可以灵活的相互转换