C语言函数问题可以递归定义吗

img


这个问题中为什么A是错误的C为什么是正确的 函数中不是不可以递归定义吗

答案是C,当然可以递归定义,递归定义就是递归函数的定义。
对于A,说法是正确的。如果以数组名作为参数,其实传递的就是地址,就是实参的地址。所以,该地址的内容变化,实参数据当然也变了,因为操作的同一个地址。
例如:
【测试代码】:

#include <stdio.h>
#include <unistd.h>

void add(int x[],int len){
    x[0] = 1;
    x[1] =2;
    printf("x addr=%p\n",x);
    len = 6;
    printf("[add] len = %d\n",len);
    //return x[0]+ x[1];
}

int main() {
    int data[2] = {3,5};
    int len = 1;
    printf("函数调用前=====\n");
    printf("data addr=%p\n",data);

    printf("data[0]: %d\n",data[0]);
    printf("data[1]: %d\n",data[1]);

    //int res = add(data,len);
    add(data,len);
    //printf("add res: %d\n",res);

    printf("函数调用后=====\n");

    printf("data[0]: %d\n",data[0]);
    printf("data[1]: %d\n",data[1]);

    printf("[main] len  =%d\n",len);

    
    return 0;
}

【运行结果】:
函数调用前=====
data addr=0x7ffeed2258c0
data[0]: 3
data[1]: 5
x addr=0x7ffeed2258c0
[add] len = 6
函数调用后=====
data[0]: 1
data[1]: 2
[main] len =1

函数递归定义就是递归函数,当然可以啊
A的问题是,指针作为参数时,是无法实现指针自身地址的修改的

当然可以,函数递归,即自己调用自己,关于详细,可以找篇博客看看,http://t.csdn.cn/jw98F