【问题标题】:Passing Char pointer in C function [duplicate]在C函数中传递Char指针[重复]
【发布时间】:2018-03-23 14:42:25
【问题描述】:

我想知道为什么下面程序的预期输出不是“hai”

#include<stdio.h>
#include<conio.h>

void first(char*);
void first(char *s)
{
  printf("%u",s);
  s="hai";
}

int main()
{
 clrscr();
  char *t ="welcome";
  printf("%u",t);
   first(t);

 printf("%s",t);
  getch();
  return 0;
}

得到的输出是 Welcome 而不是 Hai。

如果有人能详细解释一下会更有帮助吗?

【问题讨论】:

  • s="hai"; 改变的是本地指针,而不是调用者的指针
  • 为什么会是“hai”?毕竟,您只能修改变量的本地副本。考虑从good C++ book 学习而不是随机编码。 SO 不是教程服务。
  • 我不明白你能解释一下吗?
  • 简短说明:指针没有什么特别之处。

标签: c pointers char


【解决方案1】:

C 中的所有内容都是按值传递的。包括指针。因此,您已将内存地址(指针)传递给函数,然后将其重新分配为指向不同的内存位:指向您的“hai”字符串。原来的指针t 仍然愉快地指向你原来的字符串“welcome”。 当您传入t 时,您传递了t 指向的内存地址按值:该值被复制到参数/变量s

【讨论】:

    猜你喜欢
    • 2015-04-29
    • 1970-01-01
    • 2012-12-29
    • 2011-05-22
    • 1970-01-01
    • 1970-01-01
    • 2021-04-21
    • 2012-07-28
    • 1970-01-01
    相关资源
    最近更新 更多