C语言中字符数组用指针运算是否有优势?指针操作速度是否等同char*?
字符数组与指针操作的疑问解答
- 完全可以通过
char* ptr = s;定义指向字符数组起始位置的指针,之后完全能像操作普通char*类型指针一样操作它。比如要截断首字符,直接执行ptr++就行,根本不用像之前那样逐个元素赋值,代码简洁得多。 - 这种操作的速度和直接操作字符串字面量的
char*指针完全一致。本质上两者都是对内存地址进行偏移计算,只需要单条CPU指令就能完成,和逐个赋值那种需要多次内存写入的操作比,效率差距极大。
需要额外注意的一点:字符数组是存储在可修改内存区域(比如栈)的,所以通过ptr不仅能移动指针,还能通过*ptr修改数组里的内容;但字符串字面量通常存在只读数据段,指向它的char*指针只能移动,不能通过指针修改字面量内容,否则会触发未定义行为。
内容的提问来源于stack exchange,提问作者user18092857
相关产品推荐
相关产品推荐

