Estoy asumiendo que va a asignar su primera cadena:
"float"
a la primera posición de índice de palabras clave [0]
char keyword[0] = "float";
que es la primera posición de índice de la matriz:
char keyword[10];
Si es el caso anterior, en cierto sentido, básicamente está creando una estructura de datos que tiene una estructura de datos. La matriz de cualquier tipo es la estructura de datos 'más pequeña' de ese tipo en C. Teniendo en cuenta que en su ejemplo está creando una matriz de caracteres, está utilizando el tipo de datos más pequeño (char = 1bit) en cada posición de índice del la estructura de datos construida más pequeña (la matriz).
Con eso dicho, si en su ejemplo, está intentando crear una matriz de matrices; su matriz de caracteres
/* Hold ten characters total */
char keyword[10];
se diseñó para contener 10 caracteres. Uno en cada posición de índice (que probablemente ya conozcas). Así que después de declarar la matriz titulado palabras clave, a continuación, intenta inicializar la primera posición de índice de la matriz con otra (la segunda) matriz de caracteres:
/* I believe this is what you had stated */
char keywords[0] = "float";
Con la segunda matriz de caracteres que tiene un índice de 5 posiciones en tamaño.
Para lograr su objetivo deseado, esencialmente creará una matriz que básicamente emula el efecto de una estructura de datos que "contiene" otras estructuras de datos.
NOTA: Si tenía/tiene planes para tratar de crear una estructura de datos que contenga una estructura de datos que contenga una estructura de datos. A.K.A. una estructura de datos triple anidada y en este caso creo que sería una Matriz, ¡QUE NO RECOMENDARÍA!
Sin embargo, la estructura matricial tendría la forma de la primera posición de índice de la palabra clave, asignando toda la matriz de palabras clave, que incluiría todos los datos almacenados en cada posición de índice de la matriz de palabras clave. Entonces no habría algo que probablemente le gustaría: keywords1, keywords2, ... keywords9,
que emular esencialmente la forma de:
char *keyword[10] = {
char *keywords0[10] = {"float", etc, etc, etc.};
char *keywords1[10] = {"keyword1", "secondIndexOfThisArray", etc, etc, etc.};
and so
};
Así que, básicamente, de derecha a izquierda, el conjunto de palabras clave, es un conjunto de punteros que apuntan a un conjunto de punteros que apuntan a matrices de caracteres.
Si eso es lo que está representando, sería mejor definir un tipo de datos personalizado de estructura/registro, y con esa estructura personalizada, querría definir un nivel subordinado o secundario de estructuras. También puede declararlos previamente y luego inicializarlos.
p. Ej.
typedef *nestedDataStructures {
struct keyWords[];
struct keyWords1[];
struct keyWords2[];
... and so on.
}; nestedDataStructures
En lugar de añadir diez estructuras con una estructura personalizada me descomponerse en 3 o 4 (cómo cada vez las estructuras y el uso de muchos) y crear un módulo con el fin de producir capas simétricas de la abstracción como manipular el conjunto de datos .
Sin embargo, no puede crear la matriz de caracteres y asignar potencialmente la otra matriz de caracteres de la manera que lo hizo (o quién sabe que tal vez pueda), pero de la forma en que desearía emular la matriz que contiene las matrices , es crear una matriz de punteros de caracteres en el frente, de posiciones de índice de números X y luego inicializar y luego usar las matrices de caracteres en forma de cadenas declaradas con en la inicialización de la declaración original.
Así que, básicamente, puede declarar toda su matriz por adelantado, luego con el diseño de su programa, ya sea eliminar la referencia de cada posición de índice, usar la asignación o imprimir/escribir la posición del índice.
Como por ejemplo siempre se puede hacer algo como esto:
/* Example of the program and declaration with out a function */
#include <stdio.h>
int main(){
/*
* A character pointer array that contains multiple
* character arrays.
*/
char *grewMe[2] = {"I want to ", "grow to be bigger"};
int w = 0;
for(; w < 2;) {
printf("%s", grewMe[w]);
++w;
}
printf(" :-)\n");
w = 0;
return 0;
}
// Output:
// I want to grow to be bigger :-)
O algo así:
/* Example of program: function passed arguments
* of a pointer to the array of pointers
*/
#include <stdio.h>
void mygrowth(char *growMe[]);
int main(){
char *growMe[2] = {"I want to ", "grow to be bigger"};
mygrowth(growMe);
printf(" :-)\n");
return 0;
}
void mygrowth(char *growMe[])
{
int w = 0;
for (; w < 2;) {
printf("%s", growMe[w]);
++w;
}
}
La cesión de cada posición del índice como se le pasa como argumento:
/*
* This program compiles, runs and outputs properly
* Example of a program with a function of
* arguments pnt2pnter
*/
#include <stdio.h>
#include <stdlib.h>
void thoughtAsAFunction(char **iThink);
int main()
{
char *iThink[10] = {"I am trying to grow, but it's a hard task to ",
"accomplish. My father is short ",
"my mother is even shorter than him, ",
"what is the probability of me getting taller? ",
"Well both my grandfather's were Six ",
"Foot Five, and both my grandmother's ",
"were over 5 foot 8 inches tall! If my ",
"grandparent's genes point to my parents, and my ",
"parent's genes point to mine I might have a chance ",
"of being 6 foot. Do you know what I mean? "};
thoughtAsAFunction(iThink);
printf(":-)\n");
return 0;
}
void thoughtAsAFunction(char **iThink) {
int andy = 0;
for (; andy < 10;) {
char * pntThroughPnt = iThink[andy];
printf("%s", pntThroughPnt);
++andy;
}
andy = 0;
}
O pase por referencia, con un incremento de la variable de recuento de bucles:
/*
* This program compiles, runs, and outputs all of the character
* arrays.
*
*/
#include <stdio.h>
#include <stdlib.h>
void thoughtAsAFunction(char **iThink);
int main()
{
char *iThink[10] = {"I am trying to grow, but it's a hard task to ",
"accomplish. My father is short ",
"my mother is even shorter than him, ",
"what is the probability of me getting taller? ",
"Well both my grandfather's were Six ",
"Foot Five, and both my grandmother's ",
"were over 5 foot 8 inches tall! If my ",
"grandparent's genes point to my parents, and my ",
"parent's genes point to mine, then I might have a chance ",
"of being 6 foot. Do you know what I mean? "};
int andy = 0;
for (; andy < 10;) {
// pass by reference and increment.
thoughtAsAFunction(&iThink[andy]);
++andy;
}
printf(":-)\n");
andy = 0;
return 0;
}
void thoughtAsAFunction(char **iThink) {
char * pntThroughPnt = *iThink;
printf("%s", pntThroughPnt);
}
Tenga en cuenta que este es el caso si se declara la matriz de punteros (char * array [10];), y cada puntero apunta a un array de caracteres.
¿Qué piensas/espero que sea el prototipo de función? –
También puede pasar la palabra clave char * [], significa exactamente lo mismo – Matthieu
Sí, puede .... hacer lo que quiera. Pero la verdadera pregunta es qué buenos libros de programación de C has leído ... –