*b++==*(b++)

#define _CRT_SECURE_NO_WARNINGS
#include <stdlib.h>
#include<stdio.h>
#include <string.h>

void swap(char a,char b)
{
	char tmp = a;
	a = b;
	b = tmp;
}


int main()
{
	char *a ;
	char *b;
	a = malloc(8);

	strcpy(a,"GOBLIN");

	printf("len a:%d\n",strlen(a));

	b = a+strlen(a)-3;

	printf("a:%c\n",a[5]);

	printf("b:%s\n",a+3);

	swap(a[3],a[4]);


	printf("c:%s\n",a);

	printf("d:%c\n",*b);

	*(b++)='\0';

	printf("e:%s\n",a);//GOB

	printf("f:%d\n",strlen(b));//2

	free(a);
	
	system("pause");
	return 0;
}

举例:
    ++a=++b;

    执行顺序是:

    a=a+1;

    b=b+1;

    a=b;

后置运算:
举例:
    a++=b++;

    a=b;

    a=a+1;

    b=b+1;

再回到你上面的问题:
*a++=*b++;
执行顺序是:
*a;
*b;
*a=*b;
a++;

b++;

#define _CRT_SECURE_NO_WARNINGS
#include <stdlib.h>
#include<stdio.h>
#include <string.h>

void display()
{
	int a[]={1,3,5,7,9};

	int *p = a;

	//printf("a:%d\n",*p++);//1
	//printf("a:%d\n",*(p++));//1
	//printf("a:%d\n",(*p));//1
	//printf("a:%d\n",++(*p));//2
	//printf("a:%d\n",*++p);//3
	//printf("a:%d\n",*(++p));//3
	//printf("a:%d\n",++*p);//2
}
int main()
{

	display();
	system("pause");
	return 0;
}
注意display()函数中的printf语句单独运行的结果!


### C/C++ 表达式 `b *= ++a` 的行为分析 在 C 或 C++ 中,表达式 `b *= ++a` 涉及到操作符优先级、结合性以及副作用等关键概念。以下是对该表达式的详细解析: #### 1. 操作符优先级和结合性 在 C/C++ 中,操作符 `*=` 和前缀递增操作符 `++` 的优先级不同。根据 C/C++ 的操作符优先级表[^3],前缀递增操作符 `++` 的优先级高于复合赋值操作符 `*=`。因此,表达式 `b *= ++a` 的计算顺序如下: - 首先计算 `++a`,这表示将变量 `a` 的值加 1 并返回加 1 后的结果。 - 然后将 `++a` 的结果与当前的 `b` 值相乘,并将乘积赋值给 `b`。 #### 2. 代码示例 以下是实现上述逻辑的一个简单代码示例: ```c #include <stdio.h> int main() { int a = 5; int b = 10; b *= ++a; // 等价于 b = b * (++a) printf("a = %d\n", a); // 输出 a 的值 printf("b = %d\n", b); // 输出 b 的值 return 0; } ``` 运行上述代码时,`a` 的初始值为 5,`b` 的初始值为 10。执行 `b *= ++a` 后: - `++a` 将 `a` 的值从 5 增加到 6,并返回 6。 - 接着计算 `b * 6`,即 `10 * 6`,结果为 60。 - 最终将 60 赋值给 `b`。 输出结果为: ``` a = 6 b = 60 ``` #### 3. 副作用的影响 表达式中涉及的前缀递增操作符 `++a` 会修改变量 `a` 的值,这种修改被称为副作用。副作用可能导致代码难以理解和调试,尤其是在复杂的表达式中。例如,在某些情况下,可能会出现未定义行为或意外结果。因此,建议尽量避免在单个表达式中同时进行多个副作用操作。 #### 4. MISRA-C 规则的相关性 MISRA-C 是一种用于嵌入式系统开发的 C 语言编码标准,旨在提高代码的安全性和可靠性。根据提供的引用[^2],隐式的数据类型转换可能会导致不可预测的行为。因此,建议在类似 `b *= ++a` 的表达式中显式地指定数据类型以避免潜在问题。例如: ```c b = (int)(b * (double)(++a)); ``` 通过显式类型转换,可以确保每个操作数的实际数据类型明确无误。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值