chrisavr1981
25.12.2014, 17:14
Hallo zusammen,
da ich im Moment zwischen dem vielen Essen und trinken ein wenig Zeit habe, mich mit meiner Schaltung und meinem Code auseinander zu setzen.
Kommen mir ein paar Fragen auf, die ich gerne verstehen würde.
Folgender Code verstehe ich, aber die nachfolgende Meldung des Compilers verstehe ich nicht... seht selbst.
Aktueller Code worum es geht:
unsigned char special[8][8] = { { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H' },
{ 'I', 'J' ,'K' ,'L', 'M', 'N', 'O', 'P' },
{ 'Q', 'R' ,'S' ,'T', 'U' ,'V', 'W', 'X' },
{ 'Y', 'Z' ,'a' ,'b', 'c' ,'d', 'e', 'f' },
{ 'g', 'h' ,'i' ,'j', 'k' ,'l', 'm', 'o' },
{ 'p', 'q' ,'r' ,'s', 't' ,'u', 'v', 'w' },
{ 'x', 'y' ,'z' ,'1', '2' ,'3', '4', '5' },
{ '6', '7' ,'8' ,'9', '0' ,'*', '+', '-' }
};
// define a pointer for Array
unsigned char* special_ref;
void specialcarachter (unsigned char* character)
{
unsigned char memoryplace[8] = { '0','1','2','3','4', '5', '6', '7' };
int i = 0, j=0;
for (j=0; j<=7;j++)
{
printf ("This is the place: %c \n", memoryplace[j]);
for (i=0; i<=7;i++)
{
// why does this is a correct ???
printf ("This is a test === %c \n", character[j*8+i]);
// ok, i walk through the memory with eight steps, because one of these character J, are eight characters long:
// character[0*8+0] == 'A'
// character[1*8+1] == 'B'
// character[2*8+2] == 'C'
// why does this is incorrect, it is easier, but wrong???
//printf ("This is a test === %c \n", character[j][i]);
}
}
}
int main (void)
{
special_ref = special;
specialcarachter(special_ref);
return 1;
}
Meine 1. Frage, warum wird eine Warnung für diesen Pointer ausgegeben?
special_ref = special;
warning: assignment from incompatible pointer type [enabled by default]
special_ref = special;
Meine 2. Frage, macht es einen Unterschied, ob ich ein Array an die Funktion übergebe
void specialcarachter (unsigned char character[8][8])
oder
void specialcarachter (unsigned char* character)
einen Pointer auf ein Array? Mir geht es hierbei darum, weil die Aussage in "allen" C-Büchern besteht, dass Arrays vom Compiler als Pointer auf ein Array gesehen wird.
Für mich ist die 1. Schreibweise wesentlich "leichter" zu interpretieren. Wenn ich aber mit der Pointer Schreibweise, aufgrund der nicht durchzuführenden Kopie des Arrays, da es ja eine Call by reference Durchführung ist, Speicherplatz im RAM spare ist mir die 2. Schreibweise lieber!
Und die 3. Frage, wahrscheinlich schon im Text erkannt, warum kann ich in der Funktion mit den übergebenen Pointern, dass Array nicht über die Ebenen ansprechen und warum muss ich hier über die Speicherstellen gehen?
// why does this is incorrect, it is easier, but wrong???
printf ("this is a test === %c \n", character[j][i]);
printf ("This is a test === %c \n", character[j*8+i]);
// ok, i walk through the memory with eight steps, because one of these character J, are eight characters long:
// character[0*8+0] == 'A'
// character[1*8+1] == 'B'
// character[2*8+2] == 'C'
Vielen Dank für die Erläuterungen und Erklärungen.
Und einen wirklich schönen Feiertag!
da ich im Moment zwischen dem vielen Essen und trinken ein wenig Zeit habe, mich mit meiner Schaltung und meinem Code auseinander zu setzen.
Kommen mir ein paar Fragen auf, die ich gerne verstehen würde.
Folgender Code verstehe ich, aber die nachfolgende Meldung des Compilers verstehe ich nicht... seht selbst.
Aktueller Code worum es geht:
unsigned char special[8][8] = { { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H' },
{ 'I', 'J' ,'K' ,'L', 'M', 'N', 'O', 'P' },
{ 'Q', 'R' ,'S' ,'T', 'U' ,'V', 'W', 'X' },
{ 'Y', 'Z' ,'a' ,'b', 'c' ,'d', 'e', 'f' },
{ 'g', 'h' ,'i' ,'j', 'k' ,'l', 'm', 'o' },
{ 'p', 'q' ,'r' ,'s', 't' ,'u', 'v', 'w' },
{ 'x', 'y' ,'z' ,'1', '2' ,'3', '4', '5' },
{ '6', '7' ,'8' ,'9', '0' ,'*', '+', '-' }
};
// define a pointer for Array
unsigned char* special_ref;
void specialcarachter (unsigned char* character)
{
unsigned char memoryplace[8] = { '0','1','2','3','4', '5', '6', '7' };
int i = 0, j=0;
for (j=0; j<=7;j++)
{
printf ("This is the place: %c \n", memoryplace[j]);
for (i=0; i<=7;i++)
{
// why does this is a correct ???
printf ("This is a test === %c \n", character[j*8+i]);
// ok, i walk through the memory with eight steps, because one of these character J, are eight characters long:
// character[0*8+0] == 'A'
// character[1*8+1] == 'B'
// character[2*8+2] == 'C'
// why does this is incorrect, it is easier, but wrong???
//printf ("This is a test === %c \n", character[j][i]);
}
}
}
int main (void)
{
special_ref = special;
specialcarachter(special_ref);
return 1;
}
Meine 1. Frage, warum wird eine Warnung für diesen Pointer ausgegeben?
special_ref = special;
warning: assignment from incompatible pointer type [enabled by default]
special_ref = special;
Meine 2. Frage, macht es einen Unterschied, ob ich ein Array an die Funktion übergebe
void specialcarachter (unsigned char character[8][8])
oder
void specialcarachter (unsigned char* character)
einen Pointer auf ein Array? Mir geht es hierbei darum, weil die Aussage in "allen" C-Büchern besteht, dass Arrays vom Compiler als Pointer auf ein Array gesehen wird.
Für mich ist die 1. Schreibweise wesentlich "leichter" zu interpretieren. Wenn ich aber mit der Pointer Schreibweise, aufgrund der nicht durchzuführenden Kopie des Arrays, da es ja eine Call by reference Durchführung ist, Speicherplatz im RAM spare ist mir die 2. Schreibweise lieber!
Und die 3. Frage, wahrscheinlich schon im Text erkannt, warum kann ich in der Funktion mit den übergebenen Pointern, dass Array nicht über die Ebenen ansprechen und warum muss ich hier über die Speicherstellen gehen?
// why does this is incorrect, it is easier, but wrong???
printf ("this is a test === %c \n", character[j][i]);
printf ("This is a test === %c \n", character[j*8+i]);
// ok, i walk through the memory with eight steps, because one of these character J, are eight characters long:
// character[0*8+0] == 'A'
// character[1*8+1] == 'B'
// character[2*8+2] == 'C'
Vielen Dank für die Erläuterungen und Erklärungen.
Und einen wirklich schönen Feiertag!