gpt4 book ai didi

C中字符指针的澄清

转载 作者:太空狗 更新时间:2023-10-29 17:20:36 25 4
gpt4 key购买 nike

我正在学习 K&R 第二版第 5 章。

在第 87 页,字符数组的指针介绍如下:

char *pmessage;
pmessage = "Now is the time";

如何知道 pmessage 是指向字符数组的指针,而不是指向单个字符的指针?

为了扩展,在第 94 页,定义了以下函数:

/* month_name: return the name of the n-th month */
char *month_name(int n)
{
static char *name[] = {
"Illegal month",
"January", "February", "March",
...
};

return (n < 1 || n > 12) ? name[0] : name[n];
}

如果只提供上述函数声明,怎么知道返回的是单个字符还是字符数组?

如果假设 month_name() 的返回值是一个字符数组并对其进行迭代直到遇到 NULL,但返回值实际上是一个character 那么是否存在段错误的可能性?

有人可以演示指向单个字符的指针与字符数组的声明和赋值,它们在函数中的用法以及返回的标识吗?

最佳答案

所以你得到的是一个字符串文字,它是一个具有静态存储持续时间的 char 数组:

"Now is the time"

在大多数情况下,数组将衰减为指向第一个元素的指针,这就是这里发生的情况:

pmessage = "Now is the time";

您需要以了解输入和输出预期的方式设计和记录您的界面。没有运行时信息来说明所指向内容的性质。

例如,如果我们查看 man page of strtok它告诉我们:

Each call to strtok() returns a pointer to a null-terminated string containing the next token.

因此程序员确切地知道期望什么并相应地处理结果。

如果你有一个指向单个字符的指针,而不是像C 风格字符串 那么你将有undefined behavior因为您将越界访问内存。段错误是一种可能性,但未定义仅意味着结果不可预测。

关于C中字符指针的澄清,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22404380/

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