C的指针与数组
一.关于数组:
数组明年就是地址,就数组在内存中的位置。它表示第一个元素的地址,简称,数组的首地址。
int main(){
int arr[4] = {1,2,3,4};
int* p1 = arr; //arr本身的类型就是int*
int* p2 = &arr[0]; //第一个元素的地址
return 0;
}
二. 指针加减法:
指针加法:后移N个元素;
指针减法:前移N个元素;
int main(){
int arr[4] = {1,2,3,4};
int* p = arr;
p +=1; //后移一个元素,p为2,即arr[1];
printf("%08X\n",&b);
}
三.指针与数组之间的关系
1.用p可以指向数组arr的任意一个元素。
p = arr +3;或者 p = &arrr[3];
2.给数组元素赋值。
arr[3] = 10 ; 或者 (arr +3) = 10;或者 int p = arr + 3; *p = 10 ;
3.把p可以当成数组来使用
int main(){
int* p = arr[1];
p[0] = 1;
----------------------------
int a = 20;
int* p = &a;
p[0] = 11; //长度为1的数组
}
4.数组的遍历
int main(){
int arr[4] = {1,2,3,4};
for(int* p = arr;p<arr +4;p++){
printf("%d",*p);
}
}
5.越界访问(所谓的越界,就是超过了这个数组的大小范围进行赋值)
int arr[4] = {1,2,3,4};
arr[4] = 10; //运行时错误
【注意】编译错误和运行错误:从字面意思就可以看出来,编译错误就是代码在编译的时候就报错,运行错误,只有在程序运行的时候才会报错,它的编译是没问题的。