一、指针的相关运算
1、指针-指针
int main(void){
char ch[5] = {0};
int arr[10]={1,2,3,4,5,6,7,8,9,10};
printf("%d",&arr[9]-&arr[0]);
printf("%d",&arr[9]-&ch[0]);//这种是错误的得类型匹配
return 0;
}
//输出结果:9
指针-指针得到的是元素个数
//利用指针-指针写一个strlen函数
int my_strlen(char* str){
char* start =str;
char* end = str;
while(end!='\0'){
end++;
}
return end - start;
}
int main(void){
char ch[]='bit';
int len =my_strlen(ch);
printf("%d",len);
return 0;
}
2、指针的关系用算
#define N_VALUES 5
int main(void){
float* values[N_VALUES];
float* vp = &values;
for(vp = &values[N_VALUES]; vp > &values[0];){
*--vp = 0;
}
}
//简化代码的另外一种写法
for(vp = &values[N_VALUES-1]; vp >= &values[0];vp--)
{
*vp = 0;
}
/*
实际在绝大部分的编译器上是可以顺利完成任务的,然而我们还是应该避免下面的方式写,因为标准并不保证它可行。
标准规定:
允许指向数组元素的指针与指向数组最后一个元素后面的那个内存位置的指针比较,但是不允许与
指向第一个元素之前的那个内存位置的指针进行比较
*/
二、指针和数组
&arr+1实际是跳过整个数组
三、二级指针