C 指针作为for循环中的索引值

C 指针作为for循环中的索引值,c,for-loop,pointers,C,For Loop,Pointers,我想对C中的循环使用一些,并对这些循环使用公共索引。我想使用指针,因为我以后可以释放它。 我想到了这样的事情: uint8_t*p=malloc(sizeof(uint8_t)); 对于(*p=0;*p

我想对C中的循环使用一些
,并对这些循环使用公共索引。我想使用指针,因为我以后可以释放它。
我想到了这样的事情:

uint8_t*p=malloc(sizeof(uint8_t));
对于(*p=0;*p<255;*p++)
{
//说明。。。
}
//几个循环。。。
自由基(p);
但是这个代码没有我想要的效果。我怎样才能修好它

PS我是C指针的初学者。

通过这句话:

uint8_t*p=malloc(sizeof(uint8_t));
您正在分配适合容纳一个
uint8\t
的内存。您不应该在p之后触摸任何其他地址,因为您没有分配它们。您可能需要执行以下操作:

uint8_t*p=malloc(255*sizeof(uint8_t));
前一行分配的内存可以容纳255个
uint8\t
,而不是一个。这样,您可以从
p
p+254
访问地址。malloc的语法是:

int * p = (*int )malloc(sizeof(int);

您必须首先将数据类型转换为指针

好的,我解决了这个问题。我的代码:

uint8_t*p=malloc(sizeof(uint8_t));
对于(*p=0;*p<255;(*p)++)
{
//说明。。。
}
//几个循环。。。
自由基(p);

谢谢大家的回答

这很有效,但对我来说太难理解了。我将回到正常的索引变量。谢谢malloc只是从RAM中获取所需的字节数。您的代码对操作系统说:“嘿,Windows(或linux或mac),给我一个可以保存uint8_t值的内存。”。但实际上您需要255个值。这就是我将sizeof(uint8_t)乘以255的原因。这样,我说:“嘿,Windows,给我一个可以容纳255个uint8_t值的内存。”。不,对
malloc
的返回值进行强制转换是不需要的,大多数C专家都不推荐它。在如图所示的代码中,声明一个普通变量
uint8_t I,并没有完成任何不能完成的事情。有动态内存分配的用途,但这不是它!此外,使用8位类型作为索引变量通常是一个坏主意,并且是一个相当频繁的微妙错误源。你在这里尝试使用
uint8\u t
而不是普通的
int
,有什么原因吗?只要将*p++更改为(*p)++,它就可以正常工作。我使用uint8\u t是因为我想节省内存。我将检查如果我使用
int
,通常等一秒钟,对于这样的单个变量,使用小于
int
的类型会占用更多内存,运行更慢,引入错误,并浪费时间。这几乎在所有方面都是一种损失。我给你的建议是:只需使用
int
!我很高兴知道它是有效的,但是如果您只编写
uint8\t I
并在任何地方使用
i
而不是
*p
。在这里,您也是如履薄冰:当您尝试使用8位变量计数到256时,编写一个永远运行的循环非常容易。(你只算到了255,这一事实拯救了你。)我说“如果你只写
uint8\u t I;
,它将使用更少的代码和更少的数据”,但如果你把它改为纯
int I;,你可能会节省更多的钱