Я пытаюсь понять, что вы говорите о «более динамичном подходе». Возможно, вы хотите создать массив списка, каждый из которых (строки) может иметь разный размер. Если это было вы хотите, это коды могут помочь:
#include<stdio.h>
#include<string.h>
typedef char * string;
int main()
{
string array1[]={"apple","durian"};
string array2[]={"mustard","carrot","spinach"};
string array3[]={"garlic","onion","pepper", "blackpepper"};
string
* array_of_array[]={ array1,
array2,
array3 };
printf("\n%s %s", array_of_array[0][1],array_of_array[2][3]);
return 0;
}
консоли Результат:
дуриан blackpepper
Но, если вы имеете в виду все ресурсы должны быть установлены динамически, так что этот код могут помочь ...
#include<stdio.h>
#include<string.h>
typedef char * string;
typedef string * arrayString;
typedef arrayString * arrayList;
string newString(char * temp);
arrayString newArrayString(int size);
arrayList newArrayList(int size);
int main()
{
//Example 1, static allocation, string constant
string array1[]={"apple","durian"};
string array2[]={"mustard","carrot","spinach"};
string array3[]={"garlic","onion","pepper", "blackpepper"};
arrayString Example_One[3]={ array1, array2, array3 };
//Example 2, dynamic allocation using pointer struct
/************************************************************/
arrayList Example_Two=newArrayList(3);
arrayString ExTwoValue1=newArrayString(2);
arrayString ExTwoValue2=newArrayString(3);
arrayString ExTwoValue3=newArrayString(4);
Example_Two[0]=ExTwoValue1;
ExTwoValue1[0]=newString("apple2");
ExTwoValue1[1]=newString("durian2");
Example_Two[1]=ExTwoValue2;
ExTwoValue2[0]=newString("mustard2");
ExTwoValue2[1]=newString("carrot2");
ExTwoValue2[2]=newString("spinach2");
Example_Two[2]=ExTwoValue3;
ExTwoValue3[0]=newString("garlic2");
ExTwoValue3[1]=newString("onion2");
ExTwoValue3[2]=newString("pepper2");
ExTwoValue3[3]=newString("blackpepper2");
/************************************************************/
//Print Result Here...
printf("\n%s %s", Example_One[0][0],Example_One[2][3]);
printf("\n\n%s %s", Example_Two[0][0],Example_Two[2][3]);
return 0;
}
string newString(char * temp)
{
string str = (string)malloc(sizeof(char)*(strlen(temp)+2));
strcpy(str,temp);
return str;
}
arrayString newArrayString(int size)
{
arrayString arrStr= (arrayString)malloc(sizeof(string)*size);
return arrStr;
}
arrayList newArrayList(int size)
{
arrayList arrLst= (arrayList)malloc(sizeof(arrayString)*size);
return arrLst;
}
Консоль Результат:
яблоко blackpepper
apple2 blackpepper2
Это * почти * звучит как вы пытаетесь изготовить массив массив указатель на константные строки.Я использую «почти» там, потому что я читаю ваш пост четыре раза, и я все еще не мог различить, что вы ищете наверняка. – WhozCraig
'char * Пример [] [3] = {{" array "," of "," strings "}, {" array "," of "," strings2 "}, /*...*/};' ? – BLUEPIXY
Ну, я действительно пытаюсь создать хэш-таблицу адресов виртуальной памяти. Моя первоначальная мысль заключается в том, что с использованием какого-либо типа хэша я группирую конкретные адреса в «ведра». Я думал, что если бы у меня был массив указателей на массивы, я мог бы достичь этого. Тем не менее, я потерялся в синтаксисе. –