指针自增

本文展示了一段C语言代码示例,通过指针操作修改数组元素,并演示了如何使用指针来访问和打印数组中的不同元素。此代码示例有助于理解指针的基本用法及其在数组中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >



int _tmain(int argc, _TCHAR* argv[])
{


int arr[]={6,7,8,9,10}; 


int *ptr=arr;


*(ptr++)+=123;


printf("%d,%d,%d",arr[0],*ptr,*(++ptr));
return 0;
}

结果:129,8,8

在C语言中,指针的自操作(`p++`)并不是简单地将指针加1,而是根据指针指向的数据类型大小进行相应的地址偏移。具体来说,如果一个指针 `int *p` 指向的是 `int` 类型的数据,那么 `p++` 会使指针移动到下一个 `int` 类型的位置,即地址会加 `sizeof(int)` 字节,通常是4字节[^1]。 这种行为源于指针的“步长”特性,指针的类型决定了它访问内存时的步长,也就是解引用时的权限范围。例如,`char *` 类型的指针每次访问的步长是1字节,而 `int *` 类型的指针则是4字节,`double *` 则为8字节。因此,当对不同类型的指针进行自操作时,它们的地址变化也会与各自的数据类型大小保持一致。 指针操作常用于遍历数组或字符串等连续存储的数据结构。以下是一个简单的示例,展示如何使用指针来遍历一个整型数组: ```c #include <stdio.h> int main() { int arr[] = {10, 20, 30}; int *p = arr; for (int i = 0; i < 3; i++) { printf("Value at p: %d\n", *p); p++; } return 0; } ``` 在上述代码中,`*p` 用于获取当前指针指向,然后通过 `p++` 让指针依次指向下一个元素,从而完成数组的遍历。 此外,指针还可以与其他操作符结合使用,形成不同的表达式: - `*p++`:先获取指针 `p` 所指向,然后将指针 `p` 自1。也就是说,解引用操作在前,指针在后。 - `(*p)++`:对指针 `p` 所指向进行自操作,而指针本身不发生变化。 - `*++p`:先使指针 `p` 自1,然后对新的地址进行解引用操作。 - `++*p`:对指针 `p` 所指向进行前置自操作,加1,然后再使用新。 这些表达式的细微差别在实际编程中非常重要,尤其是在处理复杂数据结构和算法时,理解这些运算的执行顺序可以避免许多常见的错误。 ### 示例代码 ```c #include <stdio.h> int main() { int a = 10, b = 20, c = 30; int *p = &a; printf("Initial value: %d\n", *p); // 输出 10 *p++ = &b; // 等价于 *(p++),此时 p 已经指向 b printf("After *p++: %d\n", *p); // 输出 20 (*p)++ ; // 对 p 所指向加1,此时 b 的变为 21 printf("After (*p)++: %d\n", *p); // 输出 21 *++p = &c; // 先让 p 指向下一个位置(假设存在),然后解引用赋 printf("After *++p: %d\n", *p); // 输出 30 return 0; } ``` 该程序展示了指针与解引用、赋等操作结合使用的多种情况。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值