指针如何知道它在堆内存的末尾?

我很困惑如何解决以下任何提示都会有益的问题,提前致谢!例如

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 避免不必要的动态分配。


以上是指针如何知道它在堆内存的末尾?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>