我正在为 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程序员来说,负下标是从列表末尾开始索引的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)