C语言学习笔记——指针运算

指针+-整数

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比较,这种情况大多需要在向左检索的时候需要考虑。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值