吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1339|回复: 3
收起左侧

[已解决] 为什么这串C代码里的指针不能更改原始数据

[复制链接]
mxwawaawxm 发表于 2019-12-19 22:09
本帖最后由 mxwawaawxm 于 2019-12-19 22:21 编辑

[C] 纯文本查看 复制代码
#include <stdio.h>

void check(char *nums_input, int *nums, int *num_accord);

int main(int argc, char *argv[])
{
    int nums[4]={0, 1, 2, 3};
    char *nums_input = "0124";
    int num_accord=0;

    do {
        check(nums_input, nums, &num_accord);
        printf("%d\n", num_accord);
    } while (num_accord!=4);
    
    return 0;
}


void check(char *nums_input, int *nums, int *num_accord)
{
    int i;
    int j;

    for (i=0;i<4;i++) {
        for (j=0;j<4;j++) {
            if (nums_input[i] == '0'+nums[j]) {
                *num_accord++;
                break;
            }
        }
    }

}



大概是这样的
定义int型数组{0, 1, 2, 3}
还有字符串"0124"
想逐一比较字符串里的数字字符和int型数组里的元素是否相同,相同时,定义的num_accord加1
我写的函数void check(char *nums_input, int *nums, int *num_accord)正是为了实现逐一比对的需求
我明明传入的是num_accord的指针,为什么在check函数内部执行*num_accord++,没能够实时更改外部的num_accord的值

请问,哪里出错了

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| mxwawaawxm 发表于 2019-12-19 22:21
弄明白了。晕死,是*运算符优先级低于自增运算符
[C] 纯文本查看 复制代码
*num_accord++;


加上小括号就可以了
wyp123 发表于 2019-12-19 22:24
要修改变量的值,就得传入变量的地址,要想修改指针的值就得传递指针的地址,字符串传递的只是首字母的地址,相当于一个指针,你必须用二级指针才能修改指针的值
085304229 发表于 2019-12-19 22:52
这在自学C语言,先收藏起来,后续应该用的到
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-26 22:29

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表