Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > C Programming > A beginner's problem

Reply
Thread Tools

A beginner's problem

 
 
smartbeginner
Guest
Posts: n/a
 
      12-27-2005
I got from a book a 2D array(a[i][j] is resolved by compiler as
a[i][j]=*(&a[0][0]+total_columns*i+j); // ->1
[Stephen Holzners Assembly Language with C]
And I know when I use pointer to array I should refer
a[i][j]=*(*(a+i)+j); ->2
Is this also resolved by the compiler to (->1) (Awkward question I
know)
And my main question is why we use *(a+i) here

In the pointer to array notation
a[i][j]=*(a[i]+j);
& this again resolves to
a[i][j]=*(*(a+i)+j);
which is same as (2)
Then whats the need of both array of pointers and pointer to array
Is this makes compilers work easy

 
Reply With Quote
 
 
 
 
Keith Thompson
Guest
Posts: n/a
 
      12-27-2005
"smartbeginner" <(E-Mail Removed)> writes:
> I got from a book a 2D array(a[i][j] is resolved by compiler as
> a[i][j]=*(&a[0][0]+total_columns*i+j); // ->1
> [Stephen Holzners Assembly Language with C]
> And I know when I use pointer to array I should refer
> a[i][j]=*(*(a+i)+j); ->2
> Is this also resolved by the compiler to (->1) (Awkward question I
> know)
> And my main question is why we use *(a+i) here
>
> In the pointer to array notation
> a[i][j]=*(a[i]+j);
> & this again resolves to
> a[i][j]=*(*(a+i)+j);
> which is same as (2)
> Then whats the need of both array of pointers and pointer to array
> Is this makes compilers work easy


Have you read section 6 of the comp.lang.c FAQ (<http://c-faq.com/>)?
If not, please do so, then feel free to come back with any questions
you still have.

--
Keith Thompson (The_Other_Keith) http://www.velocityreviews.com/forums/(E-Mail Removed) <http://www.ghoti.net/~kst>
San Diego Supercomputer Center <*> <http://users.sdsc.edu/~kst>
We must do something. This is something. Therefore, we must do this.
 
Reply With Quote
 
 
 
 
tzh1115@gmail.com
Guest
Posts: n/a
 
      12-27-2005
I'm a student,i want to ask how to learn the c language.
Thank you very much!

 
Reply With Quote
 
Richard Heathfield
Guest
Posts: n/a
 
      12-27-2005
(E-Mail Removed) said:

> I'm a student,i want to ask how to learn the c language.
> Thank you very much!


If you have prior programming experience in some other language, I recommend
that you start by buying a copy of:

The C Programming Language, 2nd Ed. Kernighan & Ritchie. Prentice Hall,
1988. ISBN 0-13-110362-8 (paperback), or 0-13-110370-9 (hardback).

If you have no previous experience, I instead suggest one of these two
books:

C Programming: A Modern Approach, K.N.King, W.W.Norton & Company, 1996.
ISBN 0-393-96945-2

C: How to Program, 2nd Ed. Deitel, H.M. & Deitel, P.J. Prentice Hall, 1994.
ISBN: 0-13-226119-7


--
Richard Heathfield
"Usenet is a strange place" - dmr 29/7/1999
http://www.cpax.org.uk
email: rjh at above domain (but drop the www, obviously)
 
Reply With Quote
 
Malcolm
Guest
Posts: n/a
 
      12-27-2005

<(E-Mail Removed)> wrote
> I'm a student,i want to ask how to learn the c language.
> Thank you very much!
>

Create an ASCII file with the contents

#include <stdio.h>

int main(void)
{
printf("Hello world\n");
return 0;
}

Now get a C compiler. Fiddle with the compiler until the program compiles
and links.

Now modify the program to print out "Goodbye cruel world".
Then modify the program agian to do something else.
Continue modifying the program until you can make it do whatever you want.


 
Reply With Quote
 
Charles Richmond
Guest
Posts: n/a
 
      12-27-2005
smartbeginner wrote:
>
> I got from a book a 2D array(a[i][j] is resolved by compiler as
> a[i][j]=*(&a[0][0]+total_columns*i+j); // ->1
> [Stephen Holzners Assembly Language with C]
> And I know when I use pointer to array I should refer
> a[i][j]=*(*(a+i)+j); ->2
> Is this also resolved by the compiler to (->1) (Awkward question I
> know)
> And my main question is why we use *(a+i) here
>
> In the pointer to array notation
> a[i][j]=*(a[i]+j);
> & this again resolves to
> a[i][j]=*(*(a+i)+j);
> which is same as (2)
> Then whats the need of both array of pointers and pointer to array
> Is this makes compilers work easy


Unless some C standard or other has changed things, rely on the
following:

x[5] is the same as *(x+5)

x[5][4] is the same as *(*(x+5)+4)

x[5][4][6] is the same as *(*(*(x+5)+4)+6)

and so on...


The multiplications are taken care of because adding an
integer to a pointer causes the integer to be scaled by
the size of what is pointed to.

My whole life is pretty much based on this...

--
+----------------------------------------------------------------+
| Charles and Francis Richmond richmond at plano dot net |
+----------------------------------------------------------------+
 
Reply With Quote
 
Joe Wright
Guest
Posts: n/a
 
      12-27-2005
Malcolm wrote:
> <(E-Mail Removed)> wrote
>
>>I'm a student,i want to ask how to learn the c language.
>>Thank you very much!
>>

>
> Create an ASCII file with the contents
>
> #include <stdio.h>
>
> int main(void)
> {
> printf("Hello world\n");
> return 0;
> }
>
> Now get a C compiler. Fiddle with the compiler until the program compiles
> and links.
>
> Now modify the program to print out "Goodbye cruel world".
> Then modify the program agian to do something else.
> Continue modifying the program until you can make it do whatever you want.
>
>

That's pretty good advice. I still do a lot of that. Of course now I
call it Software Engineering and Code Re-use.

--
Joe Wright
"Everything should be made as simple as possible, but not simpler."
--- Albert Einstein ---
 
Reply With Quote
 
Barry Schwarz
Guest
Posts: n/a
 
      12-28-2005
On 26 Dec 2005 20:34:26 -0800, "smartbeginner" <(E-Mail Removed)>
wrote:

>I got from a book a 2D array(a[i][j] is resolved by compiler as
>a[i][j]=*(&a[0][0]+total_columns*i+j); // ->1
>[Stephen Holzners Assembly Language with C]
>And I know when I use pointer to array I should refer
>a[i][j]=*(*(a+i)+j); ->2


You may think you know this but you had it wrong in your previous
message thread.

>Is this also resolved by the compiler to (->1) (Awkward question I
>know)
>And my main question is why we use *(a+i) here
>
>In the pointer to array notation
>a[i][j]=*(a[i]+j);
>& this again resolves to
>a[i][j]=*(*(a+i)+j);
>which is same as (2)
>Then whats the need of both array of pointers and pointer to array
>Is this makes compilers work easy


What is the need of integer and float? The answer to both questions
is they do different things and part of your design process is to
choose the object type that works best for your needs and code
accordingly.

There are four key points:

If is a is an array and p is a pointer, then a[i] and p[i] both
designate the i-th object in the collection (assuming it exists).

In most expressions, a term with type array evaluates to the
address of the first element of the array with type pointer to
element.

The [ ] operator associates left to right. This means that
a[i][j] is treated as (a[i])[j], a[i][j][k] is treated as
((a[i])[j])[k], etc.

The language standard states that a[i] is equivalent to *(a+i).
Note that a+i is an expression in pointer arithmetic, not integer
arithmetic, as explained in my response to your previous message
thread. This makes intuitive sense since a+i is the address of the
i-th object and *(a+i) dereferences this address to yield the object
itself, just as described in the first paragraph above.

Chaining these rules together in the correct sequence and applying
them recursively where needed, keeping track of the type of each
expression, will show that a[i][j] always evaluates to *(*(a+i)+j).
This works if a is an array, a pointer to an array, or a pointer to
pointer.


<<Remove the del for email>>
 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Problem problem problem :( Need Help Mike ASP General 2 05-11-2004 08:36 AM



Advertisments