2010-09-04 4 views
8
#include<stdio.h> 
int main(void) { 
    int a[3] = {1,2,3}; 
    printf("\n\t %u %u %u \t\n",a,&a,&a+1); 
    return 0; 
} 

Ahora bien, no entiendo por qué un & y un retorno al mismo valor, ¿cuál es el razonamiento y la aplicación práctica detrás de esto? ¿También cuál es el tipo de & a y podría también hacer & (& a)?índice de matriz y el remite mismo valor

Respuesta

10

Ahora bien, no entiendo por qué un & y un retorno al mismo valor, lo que es el razonamiento

a es el nombre de la matriz que se desintegra a puntero al primer elemento de la matriz . &a no es más que la dirección de la matriz en sí, aunque a y &a imprimen el mismo valor, sus tipos son diferentes.

¿Cuál es también el tipo de & a?

puntero a una matriz que contiene tres int s, es decir int (*)[3]

podía i también hacer & (& a)?

No, la dirección del operador requiere que su operando sea un valor l. Un nombre de matriz es un lvalue no modificable por lo que &a es legal, pero &(&a) no lo es.

Tipo de impresión de &a (C++ Sólo)

#include <typeinfo> 
#include <iostream> 

int main() 
{ 
    int a[]={1,2,3}; 
    std::cout<< typeid(&a).name(); 
} 

PS:

Uso %p especificador de formato para la impresión de la dirección (usando especificador de formato incorrecto en printf invoca un comportamiento indefinido)

+0

pero no entiendo cómo y a es int (*) [3], quiero decir que no es que lo hayamos declarado en ninguna parte para ser de este tipo . – n0nChun

+1

@ n0nChun: Edité mi publicación. :) –

+0

Sí, pero ¿por qué iba a usar C++ para decirme el tipo si estoy trabajando en C. ¿No hay alguna otra razón por la cual el tipo es int (*) [3]? ¿O es algo que simplemente tiene sentido, pensar en ello de manera lógica? – n0nChun

Cuestiones relacionadas