c - 如何使指针变量在函数中可见

标签 c function pointers scope

如何使用指针而不在函数中使用 return 语句来查看 main 中 str_middle 的内容? 我设法用“num”做到这一点,但对“str_middle”却不行。

#include <stdio.h>
#include <string.h>

#define MAX_LENGTH_STR  20
#define MAX_LENGTH_MDL  10

void get_middle(char *str_name, char *str_middle, int *num);

int main(void) {
    char str_name_in[MAX_LENGTH_STR + 1];       // Reserved for '\0'
    char str_middle_out[MAX_LENGTH_MDL + 1];    // Reserved for '\0'
    int val_num = 15;

    printf("Enter the string name :");
    scanf("%20s", str_name_in);

    get_middle(str_name_in, str_middle_out, &val_num);

    printf("In main:\n");
    printf("Middle string = %s\n", str_middle_out);
    printf("Numeric Value = %d\n", val_num);

    return 0;
}


void get_middle(char *str_name, char *str_middle, int *num) {
    int length_mld = strlen(str_name) / 2;

    str_middle = str_name + length_mld;
    *num += 1;

    printf("in Func:\n");
    printf("String        = %s\n", str_name);
    printf("Middle string = %s\n", str_middle);
    printf("Numeric Value = %d\n", *num);

}

最佳答案

当您将 str_middle_out 传递给 get_middle() 时,它具有 main 中输出数组的地址。

因此,在进入 get_middle() 时,str_middle 参数指向输出数组,如果您随后写入它,您将能够看到它在main()中。

但是,get_middle() 有这一行:

str_middle = str_name + length_mld;

现在 str_middle 不再指向 main() 中定义的输出数组。

相反,它指向输入数组。

因此 get_middle() 进行计算并使用用于计算的变量 - str_middle 打印其输出(与 main 中定义的输出数组相反) ()str_middle_out)。

但是由于您的计算已失去与 main() 中定义的输出数组的任何连接,因此该数组仍然为空。这就是为什么当 main() 打印 str_middle_out 时您会看到空输出。

关于c - 如何使指针变量在函数中可见,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59094530/

相关文章:

c - Linux平台下C程序如何调用ssh退出?

git - 使用 git 识别修订中所有修改的函数

无法获取 arr[] : Implicit conversion loses integer precision: 'unsigned long' to 'int' for strlen(arr) 的长度

c - C 中的指针和数组有什么不同吗?

c - C语言读取内存

用 C 语言为多线程服务器创建作业队列

Javascript 设置变量和对象以及正确的语法(调试控制台)

python - 另一个具有功能的开关盒

C中指针可以指向自己的内存地址吗?

c - 出现错误,C 中的 "conflicting types for ' _'"。很抱歉再次问这个问题,我要么不理解,要么有其他问题