0

首先:STRCAT:

Cplusplus-strcat

当定义清楚地表明:

char * strcat ( char * destination, const char * source );

他们为什么在示例中使用 char str[80] ???他们不应该使用字符指针吗?

4

5 回答 5

3

数组也可以用作指针。需要strcat的是指向复制目标字符串的内存的指针。在这种情况下 str[80],将为您提供可以容纳 80 个字符的内存。

于 2009-11-27T10:55:57.290 回答
3

那是因为数组衰减为 C/C++ 中的指针。如果您定义char s[80]s 的值将是第一个字符的地址,即&s[0]

于 2009-11-27T10:55:50.907 回答
2
char str[80];

声明一个 80 个字符的数组。但是,在 C 和 C++ 中,数组被隐式转换为指针。当您将数组传递给函数(例如 strcat)时,它会自动“衰减”,形成指向数组第一个元素的指针。

这与说数组和指针是一回事不同。他们不是。例如,sizeof() 在上述数组上产生不同的结果,而char*.

于 2009-11-27T11:32:52.270 回答
-1

严格来说,数组是指向内存块开头的指针。指向 80 个字符开头的stra 也是如此。char *

当你索引到一个数组时,比如位置 53,以下是等价str[53]的:与 str 相同,*(str + 53)只是 achar *并且将 53 添加到字符指针将返回一个指针,因此要获取其中的值,你必须使用星号来取消引用指针。实际上,数组表示法只是使代码在某些情况下更具可读性。

实际上,使用 char 数组的一个很棒的小技巧是,当您想要在复制字符串时跳过一些前导文本时。例如,假设您的数组str[80]包含字符串"1023: error in code!"。并且您只想显示前面没有数字的字符串。在这种情况下,您可以说printf( "%s", str + 6 )并且只会"error in code!"打印。

于 2009-11-27T10:56:16.227 回答
-6
char str[80];

编辑:Opps,我匆忙回答。正如 dribeas 所说,该语句声明了一个数组,并且 str 在使用时可以隐式转换为指针。例如:

++str;

是一个无效的操作,而:

char* ptr;
++ptr;

不是。

于 2009-11-27T10:55:59.317 回答