Ich habe versucht, den folgenden Code ein, um zu sehen, wie Größe der Daten eines Zeigers zu erhalten:Erste die Größe der Daten eines Pointer
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(){
char *test_char_ptr = "This is just a test";
int *test_int_ptr = (int *) malloc(16*sizeof(int));
for(int i = 0; i<16; i++){
test_int_ptr[i] = i;
}
printf("%s\n",test_char_ptr);
printf("Test char 1: %d\n", (int)sizeof test_char_ptr);
printf("Test char 2:%d\n", (int)sizeof *test_char_ptr);
printf("Test char 3: %d\n", (int)((strlen(test_char_ptr)+1) * sizeof(char)));
printf("Test int 1:%d\n", (int)sizeof test_int_ptr);
printf("Test int 2:%d\n", (int)sizeof *test_int_ptr);
return EXIT_SUCCESS;
}
Und Code der Ausgang (auf 32-Bit-gcc 4.3) ist :
This is just a test
Test char 1: 4
Test char 2:1
Test char 3: 20
Test int 1:4
Test int 2:4
ich, dass sizeof dachte (* test_char_ptr) würde die * test_char_ptr die sizeof geben Sie mir die Daten innerhalb von. Aber stattdessen gab es mir 1, was meiner Meinung nach die Größe von Char anstelle der Daten ist. Das gleiche gilt für test_int_ptr. Lange Rede, kurzer Sinn, meine Frage ist, wie kann ich die Größe von Daten innerhalb eines Zeigers oder eines dynamisch zugewiesenen Speichers erreichen.
Seit Ihrer Bearbeitung, um die strlen() Zeile zu ändern denke ich, dass die Ausgabe nicht mehr übereinstimmt. –
Ok Ich habe den Ausgang aktualisiert. – systemsfault
möglich duplicate of [Wie finde ich die sizeof (ein Zeiger, der auf ein Array zeigt)] (http://stackoverflow.com/questions/492384/how-to-find-the-sizeofa-pointer-pointing-to-an- Array) – outis