c - 指针算法优于数组下标的令人信服的例子是什么?

标签 c pointer-arithmetic

我正在为介绍性的 C 类准备一些幻灯片,并且我正在尝试展示在数组下标上使用指针算法的好例子(和动机)。

我在书中看到的很多例子都相当相似。例如,许多书籍展示了如何反转字符串中所有值的大小写,但除了将 a[i] 替换为 *p 之外,代码是相同的。

我正在寻找一个好的(和简短的)一维数组示例,其中指针算法可以生成更优雅的代码。有什么想法吗?

最佳答案

再次获取指针而不是值:

当他们想再次获得指针时,通常会使用指针运算。要在使用数组索引时获取指针:您是 1) 计算指针偏移量,然后 2) 获取该内存位置的值,然后 3) 您必须再次使用 & 获取地址。这是更多的打字和不太干净的语法。

示例 1:假设您需要一个指向缓冲区中第 512 个字节的指针

char buffer[1024]
char *p = buffer + 512;

比:干净

char buffer[1024];
char *p = &buffer[512];

示例2:更高效的strcat

char buffer[1024];
strcpy(buffer, "hello ");
strcpy(buffer + 6, "world!");

这比:

char buffer[1024];
strcpy(buffer, "hello ");
strcpy(&buffer[6], "world!");

使用指针算术++作为迭代器:

在遍历元素数组中的每个元素时,使用++ 递增指针并使用 -- 递减指针非常有用。它比使用单独的变量来跟踪偏移量更干净。


指针减法:

您可以将指针减法与指针运算结合使用。在某些情况下,这对于在您指向的元素之前获取元素很有用。它也可以用数组下标来完成,但它看起来真的很糟糕而且令人困惑。特别是对于 python 程序员,其中给出负数下标以从列表末尾索引某些内容。

关于c - 指针算法优于数组下标的令人信服的例子是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/693139/

相关文章:

C 指针算术异常行为

c++ - "possibly-hypothetical"在指针算术规则中意味着什么?

c - 指针运算

c - 指针运算后释放指针

c++ - 您可以将 nullptr 与其他指针进行比较以进行排序吗?它总是更小吗?

c++ - 在某些编译器中使用 {0} 的数组初始化失败,但第一个元素除外

c - getchar() 忽略空格

c++ - fork 创建的进程作为父进程的拷贝有什么意义?

c - linux中获取域名(C编程)

c++ - 为什么不能对 C 函数进行名称修改?