我正在为一个介绍性的C类准备一些幻灯片,我试图提出使用指针算法而不是数组下标的好例子(和动机).
我在书中看到的很多例子都相当.例如,许多书籍展示了如何反转字符串中所有值的大小写,但除了用*p替换a [i]之外,代码是相同的.
我正在寻找一个好的(和简短的)单维数组的例子,其中指针算法可以产生明显更优雅的代码.有任何想法吗?
再次获取指针而不是值:
当他们想要再次获得指针时,通常使用指针算法.要在使用数组索引时获取指针:您是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程序员,其中给出了负的下标来从列表的末尾索引某些东西.