Exercise 3-19 (ArraysAddresses for primitive data types)
Chapter_3 Exercise_3-18 ArrayAddresses | Exercise_3-20 |
Exercise 3-19 TCP1, p. 229
Exercise 3-19. Modify ArrayAddresses.cpp (see ch3-ArrayAddresses) to work with the data types char, long int, float, and double.
CONTENTS: arraysaddresses.c ArraysAddresses.cpp
arraysaddresses.c download
#include <stdio.h> // for printf()
int main()
{
char ca[2]; short sa[2]; // arrays
int i, ia[2]; long la[2]; long long lla[2];
float fa[2]; double da[2]; long double lda[2];
printf("sizeof(char) = %lu\n", sizeof(char));
for(i = 0; i < 2; i++)
{
printf("&ca[%d] = %p (hex) = %ld (dec)\n", i, &ca[i], (long)&ca[i]);
}
printf("sizeof(short) = %lu\n", sizeof(short));
for(i = 0; i < 2; i++)
{
printf("&sa[%d] = %p (hex) = %ld (dec)\n", i, &sa[i], (long)&sa[i]);
}
printf("sizeof(int) = %lu\n", sizeof(int));
for(i = 0; i < 2; i++)
{
printf("&ia[%d] = %p (hex) = %ld (dec)\n", i, &ia[i], (long)&ia[i]);
}
printf("sizeof(long) = %lu\n", sizeof(long));
for(i = 0; i < 2; i++)
{
printf("&la[%d] = %p (hex) = %ld (dec)\n", i, &la[i], (long)&la[i]);
}
printf("sizeof(long long) = %lu\n", sizeof(long long));
for(i = 0; i < 2; i++)
{
printf("&lla[%d] = %p (hex) = %ld (dec)\n", i, &lla[i], (long)&lla[i]);
}
printf("sizeof(float) = %lu\n", sizeof(float));
for(i = 0; i < 2; i++)
{
printf("&fa[%d] = %p (hex) = %ld (dec)\n", i, &fa[i], (long)&fa[i]);
}
printf("sizeof(double) = %lu\n", sizeof(double));
for(i = 0; i < 2; i++)
{
printf("&da[%d] = %p (hex) = %ld (dec)\n", i, &da[i], (long)&da[i]);
}
printf("sizeof(long double) = %lu\n", sizeof(long double));
for(i = 0; i < 2; i++)
{
printf("&lda[%d] = %p (hex) = %ld (dec)\n", i, &lda[i], (long)&lda[i]);
}
return 0;
}
/*
gcc arraysaddresses.c -o arraysaddresses
./arraysaddresses
sizeof(char) = 1
&ca[0] = 0x7ffcf40cc496 (hex) = 140724402963606 (dec)
&ca[1] = 0x7ffcf40cc497 (hex) = 140724402963607 (dec)
sizeof(short) = 2
&sa[0] = 0x7ffcf40cc42c (hex) = 140724402963500 (dec)
&sa[1] = 0x7ffcf40cc42e (hex) = 140724402963502 (dec)
sizeof(int) = 4
&ia[0] = 0x7ffcf40cc430 (hex) = 140724402963504 (dec)
&ia[1] = 0x7ffcf40cc434 (hex) = 140724402963508 (dec)
sizeof(long) = 8
&la[0] = 0x7ffcf40cc440 (hex) = 140724402963520 (dec)
&la[1] = 0x7ffcf40cc448 (hex) = 140724402963528 (dec)
sizeof(long long) = 8
&lla[0] = 0x7ffcf40cc450 (hex) = 140724402963536 (dec)
&lla[1] = 0x7ffcf40cc458 (hex) = 140724402963544 (dec)
sizeof(float) = 4
&fa[0] = 0x7ffcf40cc438 (hex) = 140724402963512 (dec)
&fa[1] = 0x7ffcf40cc43c (hex) = 140724402963516 (dec)
sizeof(double) = 8
&da[0] = 0x7ffcf40cc460 (hex) = 140724402963552 (dec)
&da[1] = 0x7ffcf40cc468 (hex) = 140724402963560 (dec)
sizeof(long double) = 16
&lda[0] = 0x7ffcf40cc470 (hex) = 140724402963568 (dec)
&lda[1] = 0x7ffcf40cc480 (hex) = 140724402963584 (dec)
*/
Note: See Hex_to_Decimal and Decimal_to_Hex on RapidTables, Numeric_conversions.
ArraysAddresses.cpp download
#include <iostream>
using std::cout;
using std::endl;
int main()
{
char ca[2]; short sa[2]; // arrays
int i, ia[2]; long la[2]; long long lla[2];
float fa[2]; double da[2]; long double lda[2];
cout << "sizeof(char) = "<< sizeof(char) << endl;
for(i = 0; i < 2; i++)
{
cout << "&ca[" << i << "] = " << static_cast<void *>(&ca[i])
<< " (hex) = " << (long)&ca[i] << " (dec)" << endl;
}
cout << "sizeof(short) = "<< sizeof(short) << endl;
for(i = 0; i < 2; i++)
{
cout << "&sa[" << i << "] = " << &sa[i] << " (hex) = "
<< (long)&sa[i] << " (dec)" << endl;
}
cout << "sizeof(int) = "<< sizeof(int) << endl;
for(i = 0; i < 2; i++)
{
cout << "&ia[" << i << "] = " << &ia[i] << " (hex) = "
<< (long)&ia[i] << " (dec)" << endl;
}
cout << "sizeof(long) = "<< sizeof(long) << endl;
for(i = 0; i < 2; i++)
{
cout << "&la[" << i << "] = " << &la[i] << " (hex) = "
<< (long)&la[i] << " (dec)" << endl;
}
cout << "sizeof(long long) = "<< sizeof(long long) << endl;
for(i = 0; i < 2; i++)
{
printf("&lla[%d] = %p (hex) = %ld (dec)\n", i, &lla[i], (long)&lla[i]);
}
cout << "sizeof(float) = "<< sizeof(float) << endl;
for(i = 0; i < 2; i++)
{
cout << "&fa[" << i << "] = " << &fa[i] << " (hex) = "
<< (long)&fa[i] << " (dec)" << endl;
}
cout << "sizeof(double) = "<< sizeof(double) << endl;
for(i = 0; i < 2; i++)
{
cout << "&da[" << i << "] = " << &da[i] << " (hex) = "
<< (long)&da[i] << " (dec)" << endl;
}
cout << "sizeof(long double) = "<< sizeof(long double) << endl;
for(i = 0; i < 2; i++)
{
cout << "&lda[" << i << "] = " << &lda[i] << " (hex) = "
<< (long)&lda[i] << " (dec)" << endl;
}
return 0;
}
/*
g++ ArraysAddresses.cpp -o ArraysAddresses
./ArraysAddresses
sizeof(char) = 1
&ca[0] = 0x7ffe2c4a6236 (hex) = 140729641493046 (dec)
&ca[1] = 0x7ffe2c4a6237 (hex) = 140729641493047 (dec)
sizeof(short) = 2
&sa[0] = 0x7ffe2c4a61cc (hex) = 140729641492940 (dec)
&sa[1] = 0x7ffe2c4a61ce (hex) = 140729641492942 (dec)
sizeof(int) = 4
&ia[0] = 0x7ffe2c4a61d0 (hex) = 140729641492944 (dec)
&ia[1] = 0x7ffe2c4a61d4 (hex) = 140729641492948 (dec)
sizeof(long) = 8
&la[0] = 0x7ffe2c4a61e0 (hex) = 140729641492960 (dec)
&la[1] = 0x7ffe2c4a61e8 (hex) = 140729641492968 (dec)
sizeof(long long) = 8
&lla[0] = 0x7ffe2c4a61f0 (hex) = 140729641492976 (dec)
&lla[1] = 0x7ffe2c4a61f8 (hex) = 140729641492984 (dec)
sizeof(float) = 4
&fa[0] = 0x7ffe2c4a61d8 (hex) = 140729641492952 (dec)
&fa[1] = 0x7ffe2c4a61dc (hex) = 140729641492956 (dec)
sizeof(double) = 8
&da[0] = 0x7ffe2c4a6200 (hex) = 140729641492992 (dec)
&da[1] = 0x7ffe2c4a6208 (hex) = 140729641493000 (dec)
sizeof(long double) = 16
&lda[0] = 0x7ffe2c4a6210 (hex) = 140729641493008 (dec)
&lda[1] = 0x7ffe2c4a6220 (hex) = 140729641493024 (dec)
*/
Note: cout << &ca[i] does not print the address of char ca[i] because &ca[i] is interpreted as a char* or string. See display_char_address on StackOverflow for more information. See also Exercise_3-18.
Chapter_3 Exercise_3-18 ArrayAddresses | BACK_TO_TOP | Exercise_3-20 |
Comments
Post a Comment