首先:STRCAT:
当定义清楚地表明:
char * strcat ( char * destination, const char * source );
他们为什么在示例中使用 char str[80] ???他们不应该使用字符指针吗?
首先:STRCAT:
当定义清楚地表明:
char * strcat ( char * destination, const char * source );
他们为什么在示例中使用 char str[80] ???他们不应该使用字符指针吗?
数组也可以用作指针。需要strcat
的是指向复制目标字符串的内存的指针。在这种情况下 str[80]
,将为您提供可以容纳 80 个字符的内存。
那是因为数组衰减为 C/C++ 中的指针。如果您定义char s[80]
s 的值将是第一个字符的地址,即&s[0]
char str[80];
声明一个 80 个字符的数组。但是,在 C 和 C++ 中,数组被隐式转换为指针。当您将数组传递给函数(例如 strcat)时,它会自动“衰减”,形成指向数组第一个元素的指针。
这与说数组和指针是一回事不同。他们不是。例如,sizeof()
在上述数组上产生不同的结果,而char*
.
严格来说,数组是指向内存块开头的指针。指向 80 个字符开头的str
a 也是如此。char *
当你索引到一个数组时,比如位置 53,以下是等价str[53]
的:与 str 相同,*(str + 53)
只是 achar *
并且将 53 添加到字符指针将返回一个指针,因此要获取其中的值,你必须使用星号来取消引用指针。实际上,数组表示法只是使代码在某些情况下更具可读性。
实际上,使用 char 数组的一个很棒的小技巧是,当您想要在复制字符串时跳过一些前导文本时。例如,假设您的数组str[80]
包含字符串"1023: error in code!"
。并且您只想显示前面没有数字的字符串。在这种情况下,您可以说printf( "%s", str + 6 )
并且只会"error in code!"
打印。
char str[80];
编辑:Opps,我匆忙回答。正如 dribeas 所说,该语句声明了一个数组,并且 str 在使用时可以隐式转换为指针。例如:
++str;
是一个无效的操作,而:
char* ptr;
++ptr;
不是。