例如:
int *start;
start = (int*)malloc(40);
如果我想遍历所有 40 个字节,我该怎么做? 我尝试做类似的事情:
while(start != NULL){
start++;
}
但这会遍历大量值,远远大于 40。因此,如何确保遍历所有 40 个字节。
感谢大家的帮助。
最佳答案
这里有两个问题。
单个 ptr++
跳过与它指向的元素类型一样多的字节。
这里的类型是 int
,所以它每次都会跳过 4 个字节(假设是 32 位机器,因为那里的整数是 4 个字节(32 位))。
如果您想遍历所有 40 个字节(一次一个字节),请使用 char
数据类型进行迭代(或将 int*
类型转换为 char*
然后递增)
另一个问题是你的循环终止。
这里没有人在末尾放置 NULL
,因此您的循环将继续运行(并且指针向前推进)直到它遇到可能为 null 或超出您分配的内存区域和崩溃。 行为未定义。
如果你分配了 40 个字节,你必须自己在 40 个字节处终止。
值得一提的是,对 malloc 的结果进行类型转换在 C 中不是一个好主意。主要原因是它可能会篡改失败的分配。不过,这是 C++ 中的要求。详细信息可以在 SO 上的完全相同的问题中找到。搜索“casting return value of malloc”
关于c - 你如何遍历一个指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29909195/