Указатели в С
1761
8
Привет всем!
Вопрос конечно очень прост, но просто сам чего-то запутался.
Вот код:
void Test(int *t)
{
*t=100;
}
вызов функции
int t;
Test(&t);
после вызова переменной t присваивается 100.
а если у меня не переменная, а указатель на Int, т.е.
int *t;
то как мне переделать функцию, что бы t присваивалось 100.
Пробовал так:
void Test(int *t)
{
t=100;
}
int *t;
Test(t);
внутри функции переменной t присваивается значение 100, а вот после вызова функции, t не изменяется.
Как быть?
Вопрос конечно очень прост, но просто сам чего-то запутался.
Вот код:
void Test(int *t)
{
*t=100;
}
вызов функции
int t;
Test(&t);
после вызова переменной t присваивается 100.
а если у меня не переменная, а указатель на Int, т.е.
int *t;
то как мне переделать функцию, что бы t присваивалось 100.
Пробовал так:
void Test(int *t)
{
t=100;
}
int *t;
Test(t);
внутри функции переменной t присваивается значение 100, а вот после вызова функции, t не изменяется.
Как быть?
Саму функцию менять не надо, первый вариант был правильный.
В Вашем примере после изменения число 100 записывается в укзатель.
А вот в вызове нужно кое-что поменять:
int *t;
t = (int*)malloc(sizeof(int));
Test(t);
/* Что-то делаем с t */
free(t);
В Вашем примере после изменения число 100 записывается в укзатель.
А вот в вызове нужно кое-что поменять:
int *t;
t = (int*)malloc(sizeof(int));
Test(t);
/* Что-то делаем с t */
free(t);
Электроник
guru
Или так:
int t;
int* ptr;
ptr=&t;
test(ptr);
В функции ничего не меняется. В любом случае в нее надо передавать инициализированный указатель.
int t;
int* ptr;
ptr=&t;
test(ptr);
В функции ничего не меняется. В любом случае в нее надо передавать инициализированный указатель.
Спасибо, с этим я разобрался. Но у меня возник еще один вопрос: Как мне возвратить указатель на область памяти, которая выделется внутри функции. Т.е. например
int *Test()
{
return (int *)malloc(1*sizeof(int));
}
Тут все просто, но как быть если ине надо возвратить указатель на 2 переменные. Я имею ввиду, что в функции выделяется память под две переменные:
int *Test(int *temp)
{
t=(int *)malloc(1*sizeof(int));
return (int *)malloc(1*sizeof(int));
}
вот вызов:
int *temp,*t;
t=Test(temp);
В данном случае, t будет указывать на область памяти, а вот temp будет пустым. Как мне переменной temp присвоить указатель на память, выделяемую внутри функции?
int *Test()
{
return (int *)malloc(1*sizeof(int));
}
Тут все просто, но как быть если ине надо возвратить указатель на 2 переменные. Я имею ввиду, что в функции выделяется память под две переменные:
int *Test(int *temp)
{
t=(int *)malloc(1*sizeof(int));
return (int *)malloc(1*sizeof(int));
}
вот вызов:
int *temp,*t;
t=Test(temp);
В данном случае, t будет указывать на область памяти, а вот temp будет пустым. Как мне переменной temp присвоить указатель на память, выделяемую внутри функции?
А здесь надо или использовать in/out параметры, или struct
in/out:
--------
void Test(int **t, int **temp)
{
*t=(int *)malloc(1*sizeof(int));
*temp=(int *)malloc(1*sizeof(int));
return;
}
вот вызов:
int *temp,*t;
Test(&t, &temp);
struct:
---------
struct TwoPointers {
int *t;
int *temp;
}
TwoPointers *Test(void)
{
TwoPointers *twoPointersObject = (TwoPointers*)malloc(1*sizeof(TwoPointers ));
twoPointersObject->t=(int *)malloc(1*sizeof(int));
twoPointersObject->temp=(int *)malloc(1*sizeof(int));
}
вот вызов:
TwoPointers *tp = Test();
in/out:
--------
void Test(int **t, int **temp)
{
*t=(int *)malloc(1*sizeof(int));
*temp=(int *)malloc(1*sizeof(int));
return;
}
вот вызов:
int *temp,*t;
Test(&t, &temp);
struct:
---------
struct TwoPointers {
int *t;
int *temp;
}
TwoPointers *Test(void)
{
TwoPointers *twoPointersObject = (TwoPointers*)malloc(1*sizeof(TwoPointers ));
twoPointersObject->t=(int *)malloc(1*sizeof(int));
twoPointersObject->temp=(int *)malloc(1*sizeof(int));
}
вот вызов:
TwoPointers *tp = Test();
Можно проще - передать 2 параметра в вызываемую функцию, указатель на указатель:
void Test(int **temp1, int **temp2)
{
*temp1=(int *)malloc(1*sizeof(int));
*temp2=(int *)malloc(1*sizeof(int));
return;
}
вызов:
int *temp1, *temp2;
Test(&temp1, &temp2);
по-моему так. в плюсах можно использовать ссылочный тип &, если надо, могу рассказать
void Test(int **temp1, int **temp2)
{
*temp1=(int *)malloc(1*sizeof(int));
*temp2=(int *)malloc(1*sizeof(int));
return;
}
вызов:
int *temp1, *temp2;
Test(&temp1, &temp2);
по-моему так. в плюсах можно использовать ссылочный тип &, если надо, могу рассказать
Мдааааа...
не пробовал задавать вопросы в нормальных местах - RSDN.ru ? fido7.RU.Visual.CPP ?
fido7.su.c_cpp ?
не пробовал задавать вопросы в нормальных местах - RSDN.ru ? fido7.RU.Visual.CPP ?
fido7.su.c_cpp ?
Сейчас читают
красота и материнство (часть 19)
180192
1000
Дисконтные карты (обмен)
370144
1000
Монстрация 2009 или Здравствуй, демократия!
47009
387
Можно проще - передать 2 параметра в вызываемую функцию, указатель на указатель:Именно так я и сделал. Действительно тип-ссылка в C++ очень удобен(жалко его в обычном C нет), хотя и так не плохо получилось.
void Test(int **temp1, int **temp2)
{
*temp1=(int *)malloc(1*sizeof(int));
*temp2=(int *)malloc(1*sizeof(int));
return;
}
вызов:
int *temp1, *temp2;
Test(&temp1, &temp2);
по-моему так. в плюсах можно использовать ссылочный тип &, если надо, могу рассказать
Мдааааа...А чем тебе это место не нравиться? На самом деле вопрос был элементарен, но тогда я сам чего-то запутался. Да мне и здесь номрмально ответили Так что Форуму на НГС
не пробовал задавать вопросы в нормальных местах - RSDN.ru ? fido7.RU.Visual.CPP ?
fido7.su.c_cpp ?