指针如何知道它在堆内存的末尾?
我很困惑如何解决以下任何提示都会有益的问题,提前致谢!例如
int * p = new int [5];
如果我选择不使用 p[0] 使用 for 循环进行初始化,看起来像
for(int i = 0; i< 5;i++){
p[i] = i;
}
如何使用取消引用和增量运算符初始化堆上内存块中的值?我不认为下面的代码是正确的。
int val= 5 ;
for(; *p !=0; ++p){
*p = ++val;
}
还使用相同的运算符在赋值后立即打印出来。我的想法是在堆内存中初始化值后,指针指向的位置保持不变,所以为了让我从内存块中的原始位置开始,我需要将位置重置为指针指向-内存块中的起始位置-将内存块中的内容打印在堆上。
回答
指针如何知道它在堆内存的末尾?
指针是“哑巴”。它不知道这样的事情。
如何使用取消引用和增量运算符初始化堆上内存块中的值?我不认为下面的代码是正确的。
这是一个更正的版本:
int* it = p;
int* end = p + 5;
while(it != end){
*it++ = ++val;
}
PS 不要增加拥有资源的指针。
PPS 避免拥有裸指针。
PPPS 避免不必要的动态分配。