In "Hour 11" of Tony Zhang's Teach Yourself C in 24 Hours, First Edition, published by Sams Publishing in 1997, ( this is one book on C that I had really enjoyed reading -- Thanks, Mr. Zhang! ), the first program illustrates what the address-of operator ( which is the ampersand character, & ) does.
Here's the original listing:
Listing 11.1. Obtaining the left values of variables.
1: /* 11L01.c: Obtaining addresses */
2: #include <stdio.h>
3:
4: main()
5: {
6: char c;
7: int x;
8: float y;
9:
10: printf("c: address=0x%p, content=%c\n", &c, c);
11: printf("x: address=0x%p, content=%d\n", &x, x);
12: printf("y: address=0x%p, content=%5.2f\n", &y, y);
13: c = 'A';
14: x = 7;
15: y = 123.45;
16: printf("c: address=0x%p, content=%c\n", &c, c);
17: printf("x: address=0x%p, content=%d\n", &x, x);
18: printf("y: address=0x%p, content=%5.2f\n", &y, y);
19: return 0;
20: }
The output from this program is also given in the text:
C:\app> 11L01
c: address=0x1AF4, content=@
x: address=0x1AF2, content=-32557
y: address=0x1AF6, content=0.00
c: address=0x1AF4, content=A
x: address=0x1AF2, content=7
y: address=0x1AF6, content=123.45
C:\app>
Because I am inclined to modify any source program or fiddle with any source code ( that's part of the fun of reading computer programming books -- trying out the programs and then modifying them, little by little ), here's the final modified program:
/* 11L01m.c: Obtaining addresses */
/* "m" above indicates "modified" */
#include <stdio.h>
main()
{
char cAlphabet;
int iDigit;
float fDigit;
printf("Memory Addresses of 3 Variables, with their Random Contents\n\n");
printf("cAlphabet : address=0x%p, content=%c\n", &cAlphabet, cAlphabet);
printf("iDigit : address=0x%p, content=%d\n", &iDigit, iDigit);
printf("fDigit : address=0x%p, content=%5.2f\n\n\n\n\n", &fDigit, fDigit);
/* Now we do some assignments */
printf("Now we do some assignments to the variables ...\n\n");
printf("cAlphabet = 'A';\n");
printf("iDigit = 7;\n");
printf("fDigit = 123.45;\n\n");
cAlphabet = 'A';
iDigit = 7;
fDigit = 123.45;
printf("Same Memory Addresses of Same 3 Variables, with their New, Assigned Contents\n\n");
printf("cAlphabet : address=0x%p, content=%c\n", &cAlphabet, cAlphabet);
printf("iDigit : address=0x%p, content=%d\n", &iDigit, iDigit);
printf("fDigit : address=0x%p, content=%5.2f\n\n\n", &fDigit, fDigit);
printf("Note: all variables use the Hungarian Notation,\n");
printf("where, in this case, c is character-type, i is integer-type, and f is float-type.\n");
return 0;
}
Here is the output:
Memory Addresses of 3 Variables, with their Random Contents
cAlphabet : address=0x2ACF:2675, content=U
iDigit : address=0x2ACF:2672, content=11007
fDigit : address=0x2ACF:266E, content= 0.00
Now we do some assignments to the variables ...
cAlphabet = 'A';
iDigit = 7;
fDigit = 123.45;
Same Memory Addresses of Same 3 Variables, with their New, Assigned Contents
cAlphabet : address=0x2ACF:2675, content=A
iDigit : address=0x2ACF:2672, content=7
fDigit : address=0x2ACF:266E, content=123.45
Note: all variables use the Hungarian Notation,
where, in this case, c is character-type, i is integer-type, and f is float-type.
Here is the downloadable zipped file:
A Simple Address-Of (&) Program in C -- 11L01m.c and 11L01m.exe