关于间接访问符和自增自减操作符结合使用的问题

名人堂再聚首 2015-09-16 10:06:14
大家好,有这样的一个问题要请教下大家:
在指定的字符串(指针)数组中查找特定的一个字符,原代码如下:

/**
@* Function name:find_char
@* Description:find a specific char in a string array
@* Input:strings: the string array where we search the char
value: the value of the char we need to search
@* Output:0: no matched char is found, 1: we can find the char we need
*/
int
find_char(char **strings, int value) {
assert(strings!=NULL);

/* 对于列表中的每个字符串进行查找 */
while(*strings!=NULL) {
/* 观察字符串中的每个字符,看看它是否是我们查找的那个 */
while(**strings!='\0') {
if (*(*strings)++ == value) {
return 1;
}
}
strings++;
}

return 0;
}

/* 程序用到的实参及调用 */
char *strings[]={"A string", "Another", "Third", "Last", '\0'};
int result=find_char(strings, 'T');


这里主要我不明白的地方是**strings++和*(*strings)++两者之间的区别。
我只知道*(*string)++的解读过程是:
1. 括号内的先计算,*string访问字符串数组中的当前字符串(或指针);
2. 按照C语言中的操作符/运算符优先级,++和*是同级的并按照从右到左的顺序执行,所以先执行++;
3. 后缀++操作符对指针的操作实际是先产生一个指针的拷贝,这里是*string,然后再增加指针的值;
4. 最外层左边的间接访问操作符*实际是访问步骤3中产生的*string指针的拷贝(指针值未增加前的),所以其直接作用是:对当前字符串中的当前字符进行测试,看是否是我们需要的字符,由于++产生的副作用,指向当前字符串字符的指针值增加1。

但如果不对*strings加括号,也就是**strings++这个该如何解读呢?谢谢大家!
...全文
246 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
名人堂再聚首 2015-09-17
  • 打赏
  • 举报
回复
引用 1 楼 fly_dragon_fly 的回复:
后++优先级比*高,前++才跟*一样 strings是char ** 1) **strings++, 先执行++, 因为是后++, 先取地址值, 所以返回的是strings[0][0], 而strings本身+=4 2) *(*strings)++,这次先执行括号, 得到strings[0], 然后执行++, 返回的依然是strings[0][0],但是strings[0]+=1,不改变strings
解释得很经典,非常感谢!
fly_dragon_fly 2015-09-16
  • 打赏
  • 举报
回复
后++优先级比*高,前++才跟*一样 strings是char ** 1) **strings++, 先执行++, 因为是后++, 先取地址值, 所以返回的是strings[0][0], 而strings本身+=4 2) *(*strings)++,这次先执行括号, 得到strings[0], 然后执行++, 返回的依然是strings[0][0],但是strings[0]+=1,不改变strings
内容概要:本文提出了一种基于蒙特卡洛模拟与拉格朗日松弛法的分散式优化策略,用于解决电动汽车充电站在分时电价机制下的有序充电调度问题。通过蒙特卡洛方法模拟电动汽车充电行为的随机性,生成多样化负荷场景,构建以降低电网负荷波动和用户充电成本为目标的优化模型;采用拉格朗日松弛法对耦合约束进行解耦,实现分布式求解,在保障用户隐私的同时提升计算效率。文中设计了详细的仿真场景,系统分析了该调度策略对电网负荷特性和用户经济性的影响,验证了所提方法在实际应用中的有效性与可行性。; 适合人群:具备电力系统运行、优化算法理论及Matlab编程能力的研究生、科研人员以及从事智能电网与电动汽车相关领域的工程技术人员。; 使用场景及目标:①应用于城市规模化充电站集群的有序充电管理,实现电网“削峰填谷”;②为电力公司制定科学合理的分时电价政策提供量化分析工具;③支撑智能电网中需求侧资源的分布式协同优化调度研究与系统设计。; 阅读建议:建议结合提供的Matlab代码深入理解算法实现流程,重点掌握蒙特卡洛场景生成机制与拉格朗日松弛迭代求解过程,可通过调整参数设置复现不同工况下的仿真结果,以深化对分散式优化机制与调度效果之间关系的理解。
内容概要:本文研究了基于元胞神经网络配流与DQN强化学习的公交线网扰动韧性恢复方法,旨在应对公共交通系统中突发事件导致的网络扰动问题。通过结合元胞神经网络对交通流量进行精细化建模与分配,并利用深度Q网络(DQN)强化学习算法动态优化调度策略,实现公交线路在扰动后的快速恢复与运力再分配。研究构建了完整的仿真框架,在Matlab平台上实现了算法的编码与测试,验证了所提方法在提升公交系统韧性、减少乘客延误和优化资源利用方面的有效性。; 适合人群:具备一定交通工程、智能算法或强化学习基础,从事智慧交通、城市公交调度、韧性城市等方向研究的研究生、科研人员及工程技术开发者。; 使用场景及目标:①应用于城市公交系统在遭遇突发事件(如道路封闭、车辆故障、极端天气)时的应急调度与恢复决策;②为智能交通系统(ITS)提供基于AI的动态配流与优化控制方案;③推动强化学习在复杂交通网络管理中的落地实践; 阅读建议:建议读者结合Matlab代码深入理解算法实现细节,重点关注元胞神经网络的状态转移机制与DQN奖励函数的设计逻辑,并可通过调整扰动场景参数进行仿真实验,以掌握模型的适应性与优化潜力。

70,038

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧