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