Array of pointers to memory addresses

What I’m wanting to do is make the code below work in such a manner that
printing the variable “data” gives me the same result as printing each
element of “data”.

Do I need to use memory mapping, and if so, are there any examples?

Thanks!
Jack Harmon


#include <stdio.h>
#include <conio.h>
#include <tchar.h>

int _tmain(int argc, _TCHAR* argv[])
{
char *even=new char [ 16 ];
char *odd=new char [ 16 ];
char *data[ 16 ];
char string[100];
int counter1=0;
int counter2=0;

memset( even, ‘Z’, 16 );
memset( odd, ‘Z’, 16 );

for( counter1=0; counter1 < 4; counter1++ )
{
for( counter2=0; counter2 < 4; counter2++ )
{
int index=( counter1 * 4 ) + counter2;

if( ( counter1 == 0 ) || ( counter1 == 2 ) )
even[ index ]=65 + index;
else
odd[ index ]=65 + index;
}
}

for( counter1=0; counter1 < 4; counter1++ )
{
for( counter2=0; counter2 < 4; counter2++ )
{
int index=( counter1 * 4 ) + counter2;

if( ( counter1 == 0 ) || ( counter1 == 2 ) )
data[ index ]=&even[ index ];
else
data[ index ]=&odd[ index ];
}
}

printf( “%c %c %c %c\n”, even[ 0 ], even[ 1 ], even[ 2 ], even[ 3 ] );
printf( “%c %c %c %c\n”, even[ 4 ], even[ 5 ], even[ 6 ], even[ 7 ] );
printf( “%c %c %c %c\n”, even[ 8 ], even[ 9 ], even[ 10 ], even[ 11 ] );
printf( “%c %c %c %c\n”, even[ 12 ], even[ 13 ], even[ 14 ], even[ 15 ] );
printf( “\n” );

printf( “%c %c %c %c\n”, odd[ 0 ], odd[ 1 ], odd[ 2 ], odd[ 3 ] );
printf( “%c %c %c %c\n”, odd[ 4 ], odd[ 5 ], odd[ 6 ], odd[ 7 ] );
printf( “%c %c %c %c\n”, odd[ 8 ], odd[ 9 ], odd[ 10 ], odd[ 11 ] );
printf( “%c %c %c %c\n”, odd[ 12 ], odd[ 13 ], odd[ 14 ], odd[ 15 ] );
printf( “\n” );

printf( “%c %c %c %c\n”, *data[ 0 ], *data[ 1 ], *data[ 2 ], *data[ 3 ] );
printf( “%c %c %c %c\n”, *data[ 4 ], *data[ 5 ], *data[ 6 ], *data[ 7 ] );
printf( “%c %c %c %c\n”, *data[ 8 ], *data[ 9 ], *data[ 10 ], *data[
11 ] );
printf( “%c %c %c %c\n”, *data[ 12 ], *data[ 13 ], *data[ 14 ], *data[
15 ] );
printf( “\n” );

printf( “%16s\n”, *data );
printf( “\n” );

delete odd;
delete even;

getch();

return 0;
}


A B C D
Z Z Z Z
I J K L
Z Z Z Z

Z Z Z Z
E F G H
Z Z Z Z
M N O P

A B C D
E F G H
I J K L
M N O P

ABCDZZZZIJKLZZZZýýýý««««««««îþîþ


Each element in the “data []” is a 4-byte pointer to a character, so

printf( “%16s\n”, *data );

is actually printing the string pointed to by the first element of “data”.
This is the first char, but is then followed by whatever follows in memory
until a \0 is found.

You cannot say “fetch each char in sequence pointed to by an array” with a
reference to a single pointer.

HTH.

Jeff.

“Jack Harmon” <me@work.com> wrote in message
news:dui4ne$j41$1@inn.qnx.com

What I’m wanting to do is make the code below work in such a manner that
printing the variable “data” gives me the same result as printing each
element of “data”.

Do I need to use memory mapping, and if so, are there any examples?

Thanks!
Jack Harmon


#include <stdio.h
#include <conio.h
#include <tchar.h

int _tmain(int argc, _TCHAR* argv[])
{
char *even=new char [ 16 ];
char *odd=new char [ 16 ];
char *data[ 16 ];
char string[100];
int counter1=0;
int counter2=0;

memset( even, ‘Z’, 16 );
memset( odd, ‘Z’, 16 );

for( counter1=0; counter1 < 4; counter1++ )
{
for( counter2=0; counter2 < 4; counter2++ )
{
int index=( counter1 * 4 ) + counter2;

if( ( counter1 == 0 ) || ( counter1 == 2 ) )
even[ index ]=65 + index;
else
odd[ index ]=65 + index;
}
}

for( counter1=0; counter1 < 4; counter1++ )
{
for( counter2=0; counter2 < 4; counter2++ )
{
int index=( counter1 * 4 ) + counter2;

if( ( counter1 == 0 ) || ( counter1 == 2 ) )
data[ index ]=&even[ index ];
else
data[ index ]=&odd[ index ];
}
}

printf( “%c %c %c %c\n”, even[ 0 ], even[ 1 ], even[ 2 ], even[ 3 ] );
printf( “%c %c %c %c\n”, even[ 4 ], even[ 5 ], even[ 6 ], even[ 7 ] );
printf( “%c %c %c %c\n”, even[ 8 ], even[ 9 ], even[ 10 ], even[ 11 ] );
printf( “%c %c %c %c\n”, even[ 12 ], even[ 13 ], even[ 14 ], even[ 15 ] );
printf( “\n” );

printf( “%c %c %c %c\n”, odd[ 0 ], odd[ 1 ], odd[ 2 ], odd[ 3 ] );
printf( “%c %c %c %c\n”, odd[ 4 ], odd[ 5 ], odd[ 6 ], odd[ 7 ] );
printf( “%c %c %c %c\n”, odd[ 8 ], odd[ 9 ], odd[ 10 ], odd[ 11 ] );
printf( “%c %c %c %c\n”, odd[ 12 ], odd[ 13 ], odd[ 14 ], odd[ 15 ] );
printf( “\n” );

printf( “%c %c %c %c\n”, *data[ 0 ], *data[ 1 ], *data[ 2 ], *data[ 3 ] );
printf( “%c %c %c %c\n”, *data[ 4 ], *data[ 5 ], *data[ 6 ], *data[ 7 ] );
printf( “%c %c %c %c\n”, *data[ 8 ], *data[ 9 ], *data[ 10 ], *data[
11 ] );
printf( “%c %c %c %c\n”, *data[ 12 ], *data[ 13 ], *data[ 14 ], *data[
15 ] );
printf( “\n” );

printf( “%16s\n”, *data );
printf( “\n” );

delete odd;
delete even;

getch();

return 0;
}


A B C D
Z Z Z Z
I J K L
Z Z Z Z

Z Z Z Z
E F G H
Z Z Z Z
M N O P

A B C D
E F G H
I J K L
M N O P

ABCDZZZZIJKLZZZZýýýý««««««««îþîþ