c语言*p++

#include<iostream>
#include <stdio.h>
#include <stdlib.h>

using namespace std;
   
struct test1{
	int a;
	double b;
};


void PrintNum(int type)
{
    switch(type)
    {
        case 1: printf("1"); 
        case 2: printf("2");
        case 3: printf("3");
        default : printf("*\n");
    }
    return;
}

int main()
{

    int colorArray[3] = {1,2,3};
    int *color = colorArray;
    int index = 0;

	int i = 8;
	printf("11111--%d %d %d\n",i++,++i,i++);//   结果  9 8
	
	i=1;
	 PrintNum(i++);
	 i=1;
	  PrintNum(++i);
	
	
	i = 8;
	printf("22222--%d %d\n",++i,++i);//   结果 10 10

colorArray[0] = 1;colorArray[1] = 2;colorArray[2] = 3;
color = colorArray;
printf("%d\n",(*color));
    PrintNum((*color++)++);
printf("%d\n",(*color));
    
colorArray[0] = 1;colorArray[1] = 3;colorArray[2] = 3;
color = colorArray;
printf("%d\n",(*color));
    PrintNum(--(*(color+1)));
printf("%d\n",(*color));
     
colorArray[0] = 1;colorArray[1] = 2;colorArray[2] = 3;     
color = colorArray;
printf("%d\n",(*color));
    PrintNum(color[index]);
printf("%d\n",(*color));
     
colorArray[0] = 1;colorArray[1] = 2;colorArray[2] = 3;     
color = colorArray;
printf("%d\n",(*color));
    PrintNum(*(color+2));
printf("%d\n",(*color));
    return 0;
}


<h1 class="mb-5" accuse="qTitle" style="margin: 0px 0px 5px; padding: 0px; font-size: 16px; line-height: 26px; font-family: 'Microsoft YaHei', SimHei, arial; word-break: break-all; color: rgb(51, 51, 51);"><span class="ask-title " style="display: inline-block; width: 595px; overflow: hidden;">11111--10 11 8
123*
23*
22222--10 10
1
123*
2
1
23*
1
1
123*
1
1
3*
1


--------------------------------
Process exited with return value 0
Press any key to continue . . .</span></h1>


在C语言中,表达式`*++p`表示的是先将指针`p`递增(指向下一个内存位置),然后对该新位置进行解引用以获取该位置存储的值。由于后缀形式的`++`和前缀形式的`++`具有不同的优先级和行为,因此理解这一表达式的含义对于正确使用指针至关重要。 在这个表达式中,`++p`意味着前缀自增操作,即首先对指针`p`本身执行加1操作,使得`p`指向当前所指对象之后的一个对象;随后,通过`*`运算符访问这个新的地址上的数据[^2]。例如,在以下代码片段中: ```c char buf[] = "acegfd"; char *p = buf; // ... char b = *++p; // b=*(++p) ``` 初始时,指针`p`指向数组`buf`的第一个字符`'a'`。当执行`*++p`时,指针`p`首先被递增,从而指向了数组中的第二个字符`'c'`,接着解引用得到该位置上的值,并将其赋给变量`b`。此时,`b`的值会是`'c'`。 这种表达式通常用于遍历数组或字符串等连续的数据结构,它允许程序快速地访问到序列中的下一个元素。需要注意的是,在使用此类表达式时要确保不会导致指针越界,否则可能会引发未定义行为[^5]。 为了更直观地展示`*++p`的效果,我们可以看一个具体的例子: ```c #include <stdio.h> int main() { int arr[] = {10, 20, 30}; int *p = arr; printf("Before increment: *p = %d\n", *p); // 输出 *p = 10 printf("*++p = %d\n", *++p); // 先递增 p, 然后解引用, 输出 *p = 20 printf("After increment: *p = %d\n", *p); // 输出 *p = 20 return 0; } ``` 在这个示例中,开始时`p`指向数组`arr`的第一个元素`10`。打印出的结果显示`*p`为`10`。随后,通过`*++p`表达式,指针`p`向前移动了一个位置,现在指向了数组的第二个元素`20`,并输出了相应的值。最后再次打印`*p`确认其确实指向了新的位置。 综上所述,`*++p`是一个结合了指针递增与解引用的操作,它按照先递增后解引用的顺序来处理指针,可以有效地帮助开发者在C语言中操作指针以访问不同的内存位置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值