我有这两个函数做同样的事情(strcpy()
函数):
首次实施:
void strcpy(char* des_str, const char* src_str)
{
int j = 0;
while ((dest_str[j] = src_str[j])!= '\0'))
j++;
}
第二次实施:
void strcpy(char* des_str, const char* src_str)
{
while ((*dest_str = *src_str)!= '\0'))
{
src_str++;
dest_str++;
}
}
程序员通常更喜欢哪种样式/实现?{1} "数组" 方法或"指针" 方法?除了"美学和#34;之外是否存在差异?两种实现之间的差异?
答案 0 :(得分:3)
我敢打赌,生成的机器代码对两者都完全相同。 (有优化)
因此,这只是一个可读性问题:使用您和您的团队最熟悉的版本。这里最重要的是,当任何程序员看到这个源代码时,他/她不必浪费时间思考这个函数的作用。
答案 1 :(得分:1)
根据Didier的说明,机器生成的代码看起来相同,在这种情况下的性能也是一样的。但是,我建议
1)使用strncpy而不是使用strcpy。 strncpy(des,src,noOfcharToCopy);
2)从src end到des end的更好复制,而不是从开始开始; bcz想到的情况,如果src从地址105开始并且它的大小为10且des开始于 地址100然后src数据将覆盖在105地址的des。 它说“des”应该保持真正的价值,然后src。
答案 2 :(得分:0)
这取决于我所说的程序员。 主要的区别在于,在第一个实现中创建一个新变量并只修改这个变量,在第二个实现中修改两个现有变量。这是一个大小与速度的问题(但规模要小得多)
答案 3 :(得分:-1)
首先实现,即阵列实现是正确和优选的。 但这取决于程序员。最佳做法是不更改/改变指针,即应保留起始/基址,不应增加或减少。
答案 4 :(得分:-2)
据我所知,这个更常见:
void strcpy(char* des_str, const char* src_str)
{
while ((*dest_str = *src_str)!= '\0'))
{
src_str++;
dest_str++;
}
}
我只能假设因为它不需要分配任何内存(int) 虽然更准确,但我认为它通常实现为
++src_str
++dest_str
因为后缀增量必须创建一个新的int,以便在增加之前用作“之前的值”