Char* 字符数组,但 int* 不是整数数组?

2024-03-19

在 C99 中,字符串通常通过使用char*数据类型,因为没有原始的“字符串”数据类型。通过将第一个字符的地址存储在变量中,这有效地创建了一个字符数组:

FILE* out = fopen("out.txt", "w");
char* s = argv[1];
fwrite(s, 12, 1, out);
fclose(out);
//successfully prints out 12 characters from argv[1] as a consecutive string.

编译器如何知道char* s是一个字符串而不仅仅是单数的地址char?如果我使用int*它只允许一个int,而不是它们的数组。为什么有区别?

我的主要重点是理解指针、引用和取消引用是如何工作的,但整个char*一直困扰着我的头脑。


编译器如何知道char* s是一个字符串而不仅仅是单个字符的地址?

事实并非如此。就“编译器”而言,char* s是一个指向 char 的指针。

另一方面,有许多库函数假设char*指向a的一个元素空终止序列char https://en.wikipedia.org/wiki/Null-terminated_string(例如参见strlen http://en.cppreference.com/w/c/string/byte/strlen, strcmp http://en.cppreference.com/w/c/string/byte/strcmp etc.).

注意fwrite并没有做出这个假设。它要求您告诉它要写入多少字节(并且该数字不会超出第一个参数指向的缓冲区的范围。)

如果我使用int*它只允许一个 int,而不是一组 int。为什么有区别?

这是不正确的。 C语言没有特殊情况char*. An int*也可以指向数组的一个元素int。事实上,您可以编写一个使用的库0或另一个哨兵值来指示序列的结束int,并以同样的方式使用它char*按惯例使用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Char* 字符数组,但 int* 不是整数数组? 的相关文章

随机推荐