el código se muestra a continuación:
char a[] = { 'a','b','c','d','e','f' };
printf("%d\n", strlen(a));
printf("%d\n", strlen(a+0));
//printf("%d\n", strlen(*a));
//printf("%d\n", strlen(a[1]));
//printf("%d\n", strlen(&a));
//printf("%d\n", strlen(&a+1));
printf("%d\n", strlen(&a[0]+1));
carácter a[] = { 'a','b','c','d','e','f' }
strlen (a) Dado que no hay \0 en la matriz, strlen seguirá leyendo y leyendo, contando el número de caracteres antes de \0, que es un valor aleatorio
strlen (a+0) El nombre de la matriz representa la dirección del primer elemento, y +0 sigue siendo la dirección del primer elemento, que es un valor aleatorio
strlen (*a) *a es increíble, es el primer elemento de la matriz, es decir, 'a', a los ojos de las variables de puntero, todo es una direcciónPor lo tanto, el 97 de 'a' también se considera una dirección, y el acceso directo provocará un error
strlen (a[1]) como el anterior
strlen (&a) saca la dirección de toda la matriz, bip bip, valor aleatorio
strlen (&a+1) saca la dirección de toda la matriz, retrocede hasta la dirección detrás del final de la matriz, bip bipvalor aleatorio
strlen (&a[0]+1) valor aleatorio
Veamos a continuación:
char a[] = "abcdef";
printf("%d\n", strlen(a));
printf("%d\n", strlen(a+0));
//printf("%d\n", strlen(*a));
//printf("%d\n", strlen(a[1]));
//printf("%d\n", strlen(&a));
//printf("%d\n", strlen(&a+1));
printf("%d\n", strlen(&a[0]+1));
char a[] = "abcdef"
strlen (a) Dado que hay \0 en la matriz, strlen cuenta el número de caracteres antes de \0, que es 6
strlen (a+0) El nombre de la matriz indica la dirección del primer elemento, +0 sigue siendo la dirección del primer elemento, que es 6
strlen (*a) *a es increíble, es el primer elemento de la matriz, es decir, 'a', a los ojos de las variables de puntero, todo es una direcciónPor lo tanto, el 97 de 'a' también se considera una dirección, y el acceso directo provocará un error
strlen (a[1]) como el anterior
strlen (&a) saca la dirección de toda la matriz, que es 6
strlen (&a+1) saca la dirección de toda la matriz, retrocede hasta la dirección detrás del final de la matriz, bip bipEl valor aleatorio
strlen (&a[0]+1) comienza con el segundo elemento, que es 5
char* p = "abcdef";
printf("%d\n", strlen(p));
printf("%d\n", strlen(p+1));
//printf("%d\n", strlen(*p));
//printf("%d\n", strlen(p[0]));
//printf("%d\n", strlen(&p));
//printf("%d\n", strlen(&p+1));
printf("%d\n", strlen(&p[0]+1));
car* p = "abcdef"
strlen (p) strlen cuenta el número de caracteres antes de \0, que es 6
strlen (p+1) El nombre de la matriz indica la dirección del primer elemento, +1 es la dirección del segundo elemento, que es 5
strlen (*p) *a es increíble, es el primer elemento de la matriz, es decir, 'a', a los ojos de las variables de puntero, todo es una direcciónPor lo tanto, el 97 de 'a' también se considera una dirección, y el acceso directo provocará un error
strlen (p[0]) como el anterior
strlen (&p) saca la dirección de la variable de puntero p, strlen sigue leyendo hacia atrás hasta \0, que es un valor aleatorio
strlen (&p+1) saca la dirección de la variable puntero p, salta la dirección de una variable puntero y continúa leyendo sucesivamente,strlen ha estado leyendo hacia atrás hasta \0, sigue siendo un valor aleatorio
strlen (&p[0]+1) El segundo elemento comienza, es 5