gpt4 book ai didi

c - 在c中传递一个指向char数组的指针

转载 作者:太空宇宙 更新时间:2023-11-04 02:10:09 27 4
gpt4 key购买 nike

我编写了一个小测试程序来查看如何将指向 char 数组的指针传递给函数。这是我的代码:

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

int scopy(char *org ){
printf("the value of org is %s" , org);
printf("\n");
}

int main(void)
{
char original[11];
strcpy(original , "helloworld");

scopy(original);

printf("the value of original now is %s" , original);

return 0;
}

我对指针的了解告诉我 org 是一个指针,它传递了 original[0] 的内存地址,当我执行这个程序时,我观察到一些让我困惑的事情,让我怀疑我所拥有的事实学习了指针。

当我打印 org 时,我得到了完整的单词。但根据逻辑,如果指针不应该打印出内存地址;

当我尝试打印出 out[1] , out[2] 时,codepad 告诉我进程异常结束

我对这个问题的基本怀疑是 org 到底在做什么,我理解它是一个指向内存地址(哪个??)的 char 指针。任何帮助,将不胜感激 。我是 c 编程的新手。

还有当我尝试 while 循环时

while(out[i] !='\0')
printf("%s",out[i]);

它不会在 '\0' 处终止。 strcpy 文档指出 '\0' 已复制到 char 数组。

最佳答案

org 是一个指向 char 的指针,它是您在 scopy 中传递的内容(指向数组第一个元素的指针)。当您在 printf 中使用说明符 %s 时,您将指向 char 的指针视为字符串;如果你想打印它的值作为一个指针,你应该使用 %p 来代替。例如:printf("org中的内存地址为%p\n", org);

根据您所说的,我感觉您认为 %s 会将数字转换为字符串。它不会那样做,它需要一个指向字符串第一个字符的指针。

请记住,数组名称等同于 &array[0],即当您在函数中传递数组名称时,您传递的是指向第一个元素的指针。所以在这里,当你调用 scopy(original) 时,它与编写 scopy(&original[0]) 是一样的,因为 original[0]是一个 char& 是指向它的指针,这就是为什么你的函数需要 char *

关于c - 在c中传递一个指向char数组的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15212694/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com