una constante, por definición, no puede ser modificada durante la ejecución del programa... en caso contrario no sería "constante".
Si necesitas cambiar ese valor de forma dinámica, tienes que usar, por definición, memoria dinámica. La memoria dinámica se reserva como te ha comentado
El Benjo, es decir, usando malloc o calloc para reservar la memoria y free para liberarla.
El proceso en sí es sencillo:
1. Modifica tu estructura para poder hacer reservas dinámicas de memoria:
struct nodo
{
int n; // n < M n? de claves en el nodo siempre ser? menor que el orden del B tree
int *arreglo_claves; //arreglo de claves
struct nodo **p; // (n+1 punteros que van a ser usados
};
2. Crea una función que te permita hacer las reservas de memoria:
struct nodo* NuevoNodo( int n, int M )
{
struct nodo
* nuevo_nodo
= (struct nodo
*)malloc( sizeof( struct nodo
) ); nuevo_nodo
->arreglo_claves
= (int*)calloc( M
- 1, sizeof( int ) ); nuevo_nodo
->p
= (struct nodo
**)calloc( M
, sizeof( struct nodo
* ) );
return nuevo_nodo;
}
La diferencia entre malloc y calloc es que calloc pone todos los bits a 0, malloc deja la memoria con los datos que tuviese previamente ( basura ).
3. Estaría bien tener una función que permita liberar toda esa memoria.
En este caso te hace falta un free por cada malloc o calloc... esta parte te la dejo a tí.
4. Usa variables con sentido, M y n no significan absolutamente nada.