我正在为介绍性的 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/