Creo que deberias echar otro vistazo a tu manual de c++.
La funcion scanf espera una cadena de formato y en caso necesario una lista de referencias a variables de destino; estas variables de destino deben ser del tipo acorde a los especificadores de formato que indicas en la cadena de formato
Código:
char palabra[10];
scanf("%s", palabra);
int entero;
scanf("%d", &entero);
float flotante;
scanf("%f", &flotante);
int lista_enteros[10];
scanf("%d", &lista_enteros[2]);
int *entero_dinamico;
entero_dinamico = new int;
scanf("%d", entero_dinamico);
delete entero_dinamico;
int *lista_enteros_dinamicos;
lista_enteros_dinamicos = new int[10];
scanf("%d", &lista_enteros_dinamicos[2]);
delete [] lista_enteros_dinamicos;
El '&' significa referencia, y es un puntero al bloque de memoria que ocupa esa variable. Si envias la variable desreferenciada realmente estas enviando el valor como 'solo lectura', la otra funcion puede mostrarlo y modificarlo pero solo en el scope de esa funcion. En los casos de texto no es necesario enviar la referencia porque la propia variable ya es una referencia; igual sucede si usas memoria dinamica de un solo elemento pero no si creas dinamicamente una lista de elementos porque la variable es un puntero a la lista de elementos pero cada elemento necesita ser referenciado.
Aun tienes otra cosa en el scanf y en el printf, el especificador de formato que usas no existe.
Saludos
vosk