arrays on the stack

Started by
5 comments, last by Zoomby 20 years, 11 months ago
hi Imagine a local array: int array[5]; //array++; //not possible, no pointer. int* pArray=array; pArray++ //now it works Is it possible to save the pointer declaration step, and directly get a pointer, so that the second line of code works? (only local arrays, no arrays on the heap!) bye chris
Advertisement
An array isn't a pointer, even though it tends to behave like one, so you can't increment it or anything. If you want the address of a certain element, it's &array[i], where i is the element. Put that in a loop and you won't need an extra pointer.

Why, by the way, do you need to do this? What are you trying to do?

[edited by - Zipster on April 30, 2003 3:58:03 AM]
I just wanted to know if it''s possible to directly get a pointer when making a array declaration on the stack (when creating arrays on the heap you get the pointer directly). Sometimes you need just an array-pointer (to first element) and not the "array-variable" itself.

bye
chris
No, it isn't. You have to manually declare the pointer, since in doing so you're telling the compiler to allocate you a little more space to put the pointer in (an array doesn't need a pointer to tell it where it is; the compiler knows).

EDIT: other points:

1. Even if you don't plan to use the array for anything, it's still useful to have it named, for instance to look through in the debugger.
2. the variables, in a well-constructed program, should not be called "array" and "pArray". "pArray" is most likely not being used as a pointer to an array, but rather as an iterator through that array. if it were me, the code would look something like this:

int heights[5];
int* ih = &heights[0];

calling it "ih" is a good compromise between tending to write it a lot (since it's most often a loop variable) so wanting it short, and wanting to keep in mind what it's actually describing. Whether I'd actually do the &..[0] thing varies based on my mood at the time.
How appropriate. You fight like a cow.

[edited by - sneftel on April 30, 2003 4:38:21 AM]
I think he called it "array" because that is a full and thorough description of what it is. It is called "array" precisely to escape from the distractions of describing it in context. This is much like a beginner''s book teling you how to declare variables:

SomeType SomeVariable;

It isn''t suggesting that you call your classes "SomeType" or your variables "SomeVariable"
quote:Original post by Sneftel

int heights[5];
int* ih = &heights[0];



ih = &heights[0] is the same as ih = heights and it''s not true that you can''t increment pointers! You can do ih++ and it will point on the second element in the array!
quote:Original post by Anonymous Poster
ih = &heights[0] is the same as ih = heights

Which is why I said that the only difference is how I was feeling. But &heights[0] makes it clear that you intend to point to a particular element, not the array as a whole. Oftentimes, what is important is not only what your code does, but what it looks like. I''m assuming you''ve never coded in a large team environment. Eventually, you will learn why idioms such as this are useful.

quote:and it''s not true that you can''t increment pointers!

Errrrrrrrr...... huh? How did you take my post to mean that you couldn''t?

How appropriate. You fight like a cow.

This topic is closed to new replies.

Advertisement