c - 你如何遍历一个指针?

标签 c pointers

例如:

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/

相关文章:

c - 错误: ordered comparison between pointer and integer ('int' and 'int **' )

c++ - 访问另一个类的指针数组的类的成员

c - C如何知道函数中二维动态数组的维度?

c - 使用指针的数组内存地址分配声明的相同优先级

c - while循环初始化错误

c - 使用 CMake 生成 SWIG 绑定(bind)

c - 求char**形式的字符串数组的长度?

使用套接字将多个程序连接到一台服务器,c

c - 错误 "invalid use of undefined type ' struct cmplx'取消引用指向不完整类型的指针”。如何修复它?

python - 使用 C api 的 python 链表