C语言中关于子函数调用的问题(调用子函数Swap(int A),编译能通过,但是功能未能实现)

2025-01-05 14:19:07
推荐回答(2个)
回答(1):

这是形参与实参的问题,也可以说是局部变量的问题。

你在调用函数的时候,只是把P[i][j]的值赋给了A,你在子函数中修改的却只是A的值,并没有真正的修改到P[i][j]的值,所以当你的子函数调用完成后,你的P[i][j]的值根本就没有变化。

想要达到你的要求,就需要使用指针或者全局变量来做了,在你的程序中,我不建议使用全局变量,所以就要使用指针来做了。

下面是给你修改的程序,你看看。

#include "stdio.h"
#include "math.h"
void Swap(int A);
main()
{
        int P[2][8]={0x01,0x23,0x45,0x67,0x89,0xab,0xcd,0xef,
                0xfe,0xdc,0xba,0x98,0x76,0x54,0x32,0x10};

        int C[2][8]={0x01,0x23,0x45,0x67,0x89,0xab,0xcd,0xef,
                0xfe,0xdc,0xba,0x98,0x76,0x54,0x32,0x10};

        int i,j;
        for(i=0;i<2;i++)
           for(j=0;j<8;j++)
           {
                if(C[i][j]%4==0)
                {
                    printf("%x\t",P[i][j]);
                    Swap(&P[i][j]); //传递指针
                    printf("%x\n",P[i][j]);
                }
            }
}

void Swap(int* A)
{
    int c,d;
    c=*A/16;
    d=*A%16;
    *A=d*16+c
}

回答(2):

那是因为函数形参改变是不会影响实参的值的,如果你想改变实参的值,函数形参就要改用地址才行,即将Swap()里的int A改成int *A