开发者社区> 问答> 正文

如何使指针变量在函数外可见

如何在不使用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);

}

展开
收起
kun坤 2019-11-29 11:24:58 377 0
1 条回答
写回答
取消 提交回答
  • 这个:
    
    void get_middle(char *str_name, char *str_middle, int *num);
    应该:
    
    void get_middle(char *str_name, char **str_middle, int *num);
    简而言之,您的get_middle只是在函数内部重新分配了指针,而对外部没有任何影响,因此您真正想做的就是在外部更改指针的值,为此,您需要传递地址指向该指针,并更改其值。
    
    
    当传递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。
    
    2019-11-29 11:25:12
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载

相关实验场景

更多