[Last Call] Learn about multicloud storage options and how to improve your company's cloud strategy. Register Now

x
?
Solved

pointer to an array

Posted on 2004-10-16
5
Medium Priority
?
286 Views
Last Modified: 2010-04-17

Hello Experts,

I need to access the nth element of an array that I have only got a pointer pointing at.

// That is,  I have declared a pointer

            int[] *stackptr;

// then I point it at an array of integers

             stackptr = new int[50];

// now I need to access the nth element of the array

              (*stackptr)[n];

//  What is my syntax problem here?

Thank you,

-TH










0
Comment
Question by:travishaberman
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
5 Comments
 
LVL 21

Accepted Solution

by:
MogalManic earned 2000 total points
ID: 12330935
This is the classic confustion in C between arrays and pointers.  In C, an array is the same as a pointer.
When you create the array of int:
 stackptr = new int[50];
you are also creating a pointer to an int that is 50 int's long.
 int *stackptr=new int[50];

The declaration
 int[] *stackptr;
is actually an array of int pointers.  Which is the same as
 int[][] stackptr;

To dereference a pointer use the * operator.  To dereference an array use a [] operator.

So to reference the Nth element in an array
  stackptr[n]   = the Nth element in stackptr array
OR
  *(stackptr+5)  Add 5 int's to the address pointed by stackptr and get its value.
Whenever you add a pointer, the C compiler always knows what you are pointing to and adds the size of one unit (an int is 2 bytes so stackptr+1 is offset of 2 bytes in memory)

Your last example:
       (*stackptr)[n];
Dereference the value pointed by stackptr and index the Nth element in the array (assuming stackptr is an array of pointers)

0
 
LVL 11

Expert Comment

by:Jase-Coder
ID: 12331506
TRY

int *arrayptr;

arrayptr = new int[50];

//access the nth element

for(int i=0; i<50; i++)
  cout << *(arrayptr + i );

just imagine the array has had data assigned to it.

if my solution seems the same as mongol then, sorry I never read his
0
 
LVL 3

Expert Comment

by:yasser_helmy
ID: 12332182
*(stackptr+n)
0
 

Author Comment

by:travishaberman
ID: 12333456
I will try these tonight about 8 hours from now and get back to you with the points.  Thanks all,

-TH
0
 

Author Comment

by:travishaberman
ID: 12336193
That was perfect!!!  I think you just saved me about 10 hours of troubles..  Sorry I can only give you the 5 bills.

thanks again,

-TH
0

Featured Post

Concerto Cloud for Software Providers & ISVs

Can Concerto Cloud Services help you focus on evolving your application offerings, while delivering the best cloud experience to your customers? From DevOps to revenue models and customer support, the answer is yes!

Learn how Concerto can help you.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Since upgrading to Office 2013 or higher installing the Smart Indenter addin will fail. This article will explain how to install it so it will work regardless of the Office version installed.
Whether you’re a college noob or a soon-to-be pro, these tips are sure to help you in your journey to becoming a programming ninja and stand out from the crowd.
Viewers will learn how to properly install Eclipse with the necessary JDK, and will take a look at an introductory Java program. Download Eclipse installation zip file: Extract files from zip file: Download and install JDK 8: Open Eclipse and …
Progress

650 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question