Sponsored Content
Full Discussion: Pointer and address
Top Forums Programming Pointer and address Post 302803973 by hanson44 on Tuesday 7th of May 2013 09:57:34 PM
Old 05-07-2013
Here's how I would put it. Much of this you probably already know.

If you declare int n = 4;, then the compiler reserves a special location to store an int value, and stores 4 there. No big deal. The location for n is an address, some big number the program uses to keep track of where that n variable is located. We cannot change the address of n, so that's an important point. And we normally don't need to know the value of the address. The address value for n might change each time the program runs.

If you declare int *n_ptr = &n;, then the compiler reserves a special location to store a pointer value, and stores the address of n there. n and n_ptr are both variables. Again, n_ptr has an address, some big number used to keep track of where it is. Again, we cannot change the address of n_ptr. Of course, *n_ptr is the contents of the n var, so 4 in this case.

The difference between n and n_ptr is that the program "knows" (because it reads the declaration) that n holds an int, and that n_ptr holds the address of an int variable.

Another difference is that n++ results in adding one (like 4 -> 5), but n_ptr++ results in adding something like four or eight (like 1000000 -> 1000004) to move the address to the next slot that can hold an int. If the size of an int is four bytes, then n_ptr++ increases n_ptr by 4 (not 1).

&n and &n_ptr both make sense. You can take an address of either variable. You could do int **n_pp = &n_ptr;

But only *n_ptr makes sense (would equal 4). *n makes no sense, does not compile, because the n variable does not point to anything else. You can only dereference (with *) a pointer variable, or an array.

Inside the running program, a pointer (like char *ptr_var; and array (like char array_var[10];) are treated the same in many ways, but are different things.

Some similarities: &ptr_var and &array_var both work and produce the same result. *ptr_var, *array_var, ptr_var[0], array_var[0] all work and produce the same result.

A difference: ptr_var++ works, and increases the stored value. But array_var++ does not work, because it will try to increase the address of array_var and this does not make sense, is not allowed. Just like we cannot change the address of the n variable, we cannot change the address of the array_var. You could say array_var[0]++ and that's OK.

--------------------------------

Quote:
Can I say the address of a pointer is an array of char there in these two cases (strings!)? In the second sample *arr was printed out by looping thru the actual char array, but argv[iCount] was not looped thru, where *argv[iCount] was only the first char of its contents. Is this correct?
I would say the pointer has an address and also holds an address.

I would say argv was looped through in both cases, but just a different way, either by increasing iCount or by increasing the address held in the argv variable.

Yes, *argv[iCount] is only the first char of the contents, and is exactly the same as argv[iCount][0]

----------------------------

This stuff is confusing for many or most C programmers. But it's very interesting and really important for effective programming. As you are doing, one good way to learn is to write little test programs, and see what happens.
This User Gave Thanks to hanson44 For This Post:
 

10 More Discussions You Might Find Interesting

1. UNIX for Dummies Questions & Answers

network address and broadcast address?

say I have a IP address which is 10.0.0.12, and subnet mask is 255.255.255.240, what is the network address and what is the broadcast address which host lives on? And could you explain how to get the answer? thanx in advance! (7 Replies)
Discussion started by: pnxi
7 Replies

2. IP Networking

How to Achive IP address through MAC(Ethernet) address

Hi sir, i want to make such programe which takes MAC(Ethernet) address of any host & give me its IP address....... but i'm nt getting that how i can pass the MAC address to Frame........ Please give me an idea for making such program... Thanks & regards Krishna (3 Replies)
Discussion started by: krishnacins
3 Replies

3. Programming

A Pointer to non-Virtual Address, and All of my Hard drive

How do I get a pointer to any 32 bit address on my hard drive, in which I then could read that memory or write to that memory address? And, while the subject is on, how do get a 32 bit pointer in RAM also, in which I can do the same? I'm using C and Objective-C with gcc on an iBook G4. A... (9 Replies)
Discussion started by: xcoder66
9 Replies

4. Programming

address of pointer

Hi i'm new to c programming and i'm trying to change the address of a pointer/variable but i can't seem to get it right, I have this char heap; char *firstFree = heap; char *allocMem( int size ) { void *malloc(size_t sizeofint); /*allocate space for an array with size... (19 Replies)
Discussion started by: Poison Ivy
19 Replies

5. Programming

pass a pointer-to-pointer, or return a pointer?

If one wants to get a start address of a array or a string or a block of memory via a function, there are at least two methods to achieve it: (1) one is to pass a pointer-to-pointer parameter, like: int my_malloc(int size, char **pmem) { *pmem=(char *)malloc(size); if(*pmem==NULL)... (11 Replies)
Discussion started by: aaronwong
11 Replies

6. Shell Programming and Scripting

ksh - how to list all ip address between 2 ip address

Trying to do a ksh script that needs to list all ip address between ip address a and b .. ie. Ip address A=192.168.1.200 Ip address B=192.168.2.15 So the subnet changes from 1 to 2 but I want to list all possible ip addresses between the 2.. Which would be: 192.168.1.200... (4 Replies)
Discussion started by: frustrated1
4 Replies

7. UNIX for Dummies Questions & Answers

Panic kernal-mode address fault on user address 0x14

:) Firstly Hi all!!, im NEW!! and on here hoping that someone might be able to offer me some help... i have a server that keeps crashing every few days with the error message: PANIC KERNAL-MODE ADDRESS FAULT ON USER ADDRESS 0X14 KERNAL PAGE FAULT FROM (CS:EIP)=(100:EF71B5BD) EAX=EF822000... (10 Replies)
Discussion started by: Twix
10 Replies

8. IP Networking

Tracing a MAC address to IP address: Solaris

Hi there I lost connectivity to one of our remote systems and when I checked the messages log I found the following: Aug 10 23:42:34 host xntpd: time reset (step) 1.681729 s Aug 16 13:20:51 host ip: WARNING: node "mac address" is using our IP address x.x.x.x on aggr1 Aug 16 13:20:51 host... (9 Replies)
Discussion started by: notreallyhere
9 Replies

9. UNIX for Dummies Questions & Answers

Printing pointer address

How can I print the memory address of a pointer using printf (or any other STDOUT functions?). I see in Linux its %p but not in unix, help? thanks (5 Replies)
Discussion started by: perleo
5 Replies

10. UNIX for Advanced & Expert Users

C program to detect duplicate ip address if any after assigning ip address to ethernet interface

Hi , Could someone let me know how to detect duplicate ip address after assigning ip address to ethernet interface using c program (3 Replies)
Discussion started by: Gopi Krishna P
3 Replies
All times are GMT -4. The time now is 08:19 AM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy