вопрос не совсем из Визуал но я там с этим столкнулся %). Хочу чтобы функция изменяла двумерный массив. Использую такой код:
main()
{
char ** files;
vvod(&files);
}
vvod(char *** list)
{
int i,n=3;
for(i=0;i<n;i++) *list=(char **)calloc(n,sizeof(char *));
**(list+0)="zxcvb";
**(list+1)="asdfg";
**(lis t+2)="qwert";
}
Так вот а в main передается только первое значение массива, т.е. **(list+0).
files[0] = "zxcvb"; а вот files[1], files[2]="";
Подскажите как получать все значения ???
Здравствуйте zaxs, Вы писали:
Z>main() Z>{ Z>char ** files; Z>vvod(&files); Z>} Z>vvod(char *** list) Z>{ Z>int i,n=3; Z>for(i=0;i<n;i++) *list=(char **)calloc(n,sizeof(char *)); Z>**(list+0)="zxcvb"; Z>**(list+1)="asdfg"; Z>**(lis t+2)="qwert"; Z>} Z>Так вот а в main передается только первое значение массива, т.е. **(list+0). Z>files[0] = "zxcvb"; а вот files[1], files[2]=""; Z>Подскажите как получать все значения ???
тут две ошибки
1) память надо выделять только один раз, а не три
2) вместо **(list + 0) должно быть *((*list) + 0)
Здравствуйте zaxs, Вы писали:
Z>вопрос не совсем из Визуал но я там с этим столкнулся %). Хочу чтобы функция изменяла двумерный массив. Использую такой код: Z>main() Z>{ Z>char ** files; Z>vvod(&files); Z>} Z>vvod(char *** list) Z>{ Z>int i,n=3; Z>for(i=0;i<n;i++) *list=(char **)calloc(n,sizeof(char *)); Z>**(list+0)="zxcvb"; Z>**(list+1)="asdfg"; Z>**(lis t+2)="qwert"; Z>} Z>Так вот а в main передается только первое значение массива, т.е. **(list+0). Z>files[0] = "zxcvb"; а вот files[1], files[2]=""; Z>Подскажите как получать все значения ??? Z>
Предлагаю вот такой пример:
#include <stdio.h>
#include <stdlib.h>
void vvod( char *** list );
void vyvod( char *** list );
void main() {
char **files;
vvod( &files );
vyvod( &files );
}
void vvod( char *** list ) {
*list = (char**)calloc( 3, sizeof(char*) );
(*list)[0] = "zxcvb";
(*list)[1] = "asdfg";
(*list)[2] = "qwert";
}
void vyvod( char *** list ) {
for( int i = 0; i < 3; i++ ) printf( "*list[%d] = \"%s\"\n", i, (*list)[i] );
getchar();
}
Re: запутался с указателями
От:
Аноним
Дата:
09.04.02 12:27
Оценка:
Здравствуйте zaxs, Вы писали:
typedef int TArray[5][10];
void ByRef(TArray &src)
{
for (int i=0; i<5; i++)
for (int j=0; j<10; j++)
src[i][j] = 1;
}
void ByPointer(TArray *src)
{
// ByRef(*src,2);
for (int i=0; i<5; i++)
for (int j=0; j<10; j++)
(*src)[i][j] = 2;
}
Здравствуйте zaxs, Вы писали:
Z>вопрос не совсем из Визуал но я там с этим столкнулся %). Хочу чтобы функция изменяла двумерный массив. Использую такой код: Z>main() Z>{ Z>char ** files; Z>vvod(&files); Z>} Z>vvod(char *** list) Z>{ Z>int i,n=3; Z>for(i=0;i<n;i++) *list=(char **)calloc(n,sizeof(char *)); Z>**(list+0)="zxcvb"; Z>**(list+1)="asdfg"; Z>**(lis t+2)="qwert"; Z>} Z>Так вот а в main передается только первое значение массива, т.е. **(list+0). Z>files[0] = "zxcvb"; а вот files[1], files[2]=""; Z>Подскажите как получать все значения ??? Z>
Очень много звездочек
:))
Можно сделать так:
void vvod(char** &files);
void main()
{
char** files;
vvod(files);
}
void vvod(char** &files)
{
int n = 3;
files = new char*[n];
files[0] = "zxcvb";
...
}
Тоже самое немного попроще, и ошибок поменьше :)
Re[2]: запутался с указателями
От:
Аноним
Дата:
10.04.02 04:43
Оценка:
Здравствуйте DarkGray.
Спасибо за подсказку поставил одну лишнюю звездочку за скобкой.
А три раза память выделять для char * было необходимо т.к. в настоящей функции строка присваивается динамически.
Т.е. под нее надо выделять память. А тут она выделяется неявно и это действиптельно лишнее.
Спасибо.