指针+-整数
1.数组下标写法
通过数组下标索引进行对应的改动。
int main()
{
int arr[10] = {0};
int i = 0;
int sz = sizeof(arr) / sizeof(arr[0]);
for (i = 0; i < sz; i++)
{
arr[i] = 1;
}
return 0;
}
2.指针地址+-
通过指针获取第一个元素的地址,再对地址++,实现对元素的改动。
int main()
{
int arr[10] = {0};
int i = 0;
int sz = sizeof(arr) / sizeof(arr[0]);
int*p = arr;//获取数组第一个元素的地址
for(i = 0; i < sz; i++)
{
*p = 1;//该地址元素变为
p++;//地址+1
}
return 0;
}
3.指针地址对应的值+-
p固定为下标为0的地址,即时arr[0]的地址,对p的地址+i后解引用得到新地址,再改变该地址的元素。
int main()
{
int arr[10] = {0};
int i = 0;
int sz = sizeof(arr) / sizeof(arr[0]);
int*p = arr;
for(i = 0; i < sz;)
{
*(p+i)=1;
}
return 0;
}
指针-指针
指针-指针可以用来计算元素的个数,指针+指针,地址+地址,并无意义。
int my_strlen(char *str)
{
char *p= str;//赋予p第一个元素的地址
while(*str != '\0')//检索到'\0'时停止
{
str++;
}
return (p-str);//返回元素个数
}
int main()
{
int len = my_strlen("abcde");//调用my_strlen()函数
printf("%d\n",len);
return 0;
}
指针的关系运算
在绝大部分的编译器上是可以完成下面的代码,但是还是应该避免这样写,因为标准并不不保证他可行。
for(vp = &values[N_VALUES-1]; vp >= &values[0];vp--)//从后向前检索
{
*vp = 0;
}
标准规定:
允许指向数组元素的指针与指向数组最后一个元素后面的那个内存位置的指针比较,但不允许与指向第一个元素之前的那个内存位置的指针进行比较。如图,P1只可以与P2比较。而无法与P3比较,这种情况大多需要在向左检索的时候需要考虑。