#include <stdio.h>
#include <math.h>
#include <string.h>
#define N_VALUES 5
int main(){
int arr[N_VALUES] = { 0 };
for(int* vp = &arr[N_VALUES];vp > &arr[0];){
*--vp = 0;
}
/*标准上不允许
标准规定:
充许指向数组元素的指针与指向数组最后一个元素后面的那个内存位置的指针比较,但是不充许
与指向第一个元素之前的那个内存位置的指针进行比较*/
for(int vp = &arr[N_VALUES - 1];vp >= &arr[0];vp--){
*vp = 0;
}
return 0;
}
指针和数组
数组名是什么:数组名是数组首元素地址
int main(){
int arr[10] = { 0 };
printf("%d\n",arr);
printf("%d\n",&arr[0]);//输出结果一样
return 0;
}
p + i产生的就是下标为i的元素的地址
int main()
int arr[10l={0};
int*p = arr;
int i=0;
for(i = 0; i < 10; i++){
printf("%p <==> %pln",arr[i],p + i);//p + i产生的就是下标为i的元素的地址
}
return o;
}
[]是一个操作符2和arr是两个操作数
int main()
int arr[10] = ( 1,2,3,4,5,6,7,8,9,10);
int* p = arr;//数组名
printf("%d\n",arr[2]);
printf("%d\n", p[2]);//p[2] --> *(p+2)
//[]是一个操作符2和arr是两个操作数
//a+b <==> b+a
printf("%d\n",2[arr]);
printf("%d\n", arr[2]);
//arr[2] --> *(arr+2)-->*(2+arr)-->2[arr]
//arr[2] <==> *(arr+2) <==> *(p+2) <==> *(2+p) <==> *(2+arr) == 2[arr]
//2「arrl<==>*(2+arr)
二级指针
int main() {
int a = 10;
int*pa = &a;//pa是指针变量,一级指针
//ppa就是一个二级指针变量
int**ppa = &pa;//pa也是个变量,&pa取出pa在内存中起始地址
return O;
}
//*ppa == pa
//*pa == a
//**ppa == a
指针数组
引出:
int main() {
int arr[10]; // Integer array
char ch[5]; // Character array
int *parr[5]; // Integer pointer array
char *pch[5]; // Character pointer array
return 0;
}