2012-01-18 10 views
6

¿Son ambas instrucciones de puntero las mismas?Declarar una sintaxis de puntero en una función

void reverse(const char * const sPtr){ 


} 

y

void reverse(const char const *sPtr){ 


} 
+0

Es posible que desee para usar algunos 'typedef's. –

+0

@Dan O no. Se desaconseja utilizar 'typedef' para los tipos de punteros de objeto. – ouah

+0

@ouah: ¿quién lo desalienta, y por qué te importaría lo que desalentó alguien que aparentemente no tiene idea de lo que está hablando? –

Respuesta

5

No.

const char const *sPtr es equivalente a const char *sPtr.

const char *sPtr dicen que el parámetro sPtr es un puntero a un const char.

const char * const sPtr es un const puntero a un const char.

Tenga en cuenta que esto es equivalente en C99 y C11:

(C99, 6.7.3p4) "Si el mismo calificador aparece más de una vez en el mismo especificador-calificador de vinos, ya sea directamente o por medio de una o más typedefs, el comportamiento es el mismo que si solo apareciera una vez ".

pero no en C89, donde const char const *sPtr es una violación de restricción:

(C90, 6.5.3) "El mismo tipo de clasificación no podrá aparecer más de una vez en la misma lista o una lista especificador de clasificación, ya sea directamente o a través de uno o más typedefs ".

+0

Ok. Gracias. eso tiene sentido. – runners3431

1

No.

El primero es un puntero const-const char.

El segundo es un puntero a const char.

const se une a la izquierda oa la derecha, no hay nada a la izquierda.

+0

Gracias por ese bocado. – runners3431

2

¿Qué estás tratando de lograr?

Si quieres un puntero constante que tiene que poner const después de la *

int * const a; 

Si desea un puntero a const usted tiene que poner la const antes de la *

const int *a; 
+0

Voy a tomar una cadena y simplemente la invierto con una instrucción printf. – runners3431

Cuestiones relacionadas