Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Вопросы начинающего программиста

Ответить
Настройки темы
Вопросы начинающего программиста

Аватара для vadimiron

Ветеран


Сообщения: 1864
Благодарности: 120


Конфигурация

Профиль | Отправить PM | Цитировать


Делаю такую переменную: char text[30]. А значение данной переменной должно состоять из занчений двух переменных и плюс просто текст, то есть значение переменной text как бы собирается из разных частей
Как это правильно записать??
text=var1"lalala"var2 конечно не проходит

P.S.:вопросов будет ещё много


Добавлено:

А сам разобрался: надо использовать функцию sprintf()

Админам: плиззз, не удаляйте этот топик
Я буду тут свои вопросы задавать

-------
Fortes fortuna adiuvat


Отправлено: 20:29, 29-09-2004

 

Аватара для vadimiron

Ветеран


Сообщения: 1864
Благодарности: 120

Профиль | Отправить PM | Цитировать


Как сделать, чтобы функция возвращала массив в С или С++
Код: Выделить весь код
int func()
{
    int B[6]={0,1,2,3,4,5};
    return B;
}

int C[6]=func();
Как исправить этот код, чтобы он работал?
Там вроде надо как то с пойнтерами поигаться, я в них пока слаб....

-------
Fortes fortuna adiuvat


Отправлено: 00:58, 10-01-2005 | #21



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для hasherfrog

Старый параноик


Сообщения: 2423
Благодарности: 85

Профиль | Отправить PM | Цитировать


Во-о-о-от. А теперь пускай сюда придут люди, которые говорят, что "С круче Дельфи" и расскажут в двух словах, как бы это так хитро сделать, чтобы программа была ясна и понятна...

Отправлено: 01:20, 10-01-2005 | #22


Аватара для Netscaper

Пользователь


Сообщения: 84
Благодарности: 0

Профиль | Отправить PM | Цитировать


Вот пример.
Код: Выделить весь код
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>

int *wrong_func()
{
    int b[6] = {0, 1, 2, 3, 4, 5};
    int *ptr;
    ptr = &b[0];
    return ptr;
}

int *solve_func()
{
    int *b;
    int i;
    b = (int *)malloc(sizeof(int) * 6);
    for (i = 0;i < 6; i++)
        b[i] = i;
    return b;
}

void main()
{
    int *c;
    int i;
    c = wrong_func();
    for(i = 0;i < 6; i++)
        printf("%d ",c[i]);
    printf("\n");
    c = solve_func();
    for(i = 0;i < 6; i++)
        printf("%d ",c[i]);
    printf("\n");
    free((void *)c);
    getchar();    
}
Первая функция wrong_func возвращает указатель на массив, который указывается внутри этой функции. Как видно, возвращается непонятно что. Дело в том, что этот массив создается только для этой функции (я не хочу углублятся в принципы организации памяти) и, следовательно, значения будут иметь место только в ней. Намного проще использовать динамический массив, например, как в функции solve_func, который создается и иницилизируется внутри неё. Дело в том, что динамический массив создается (функция malloc)«глобально» и будет действителен, пока не будет вызвана функция free (будет уничтожен). Надеюсь, понятно изложил. Хотя, всё-таки, присоединяюсь к мнению hasherfrog, про то, что книжки надо читать. Желательно без чьей-либо помощи. Проще говоря, разобраться самому.

Отправлено: 01:30, 10-01-2005 | #23


Ветеран


Сообщения: 1404
Благодарности: 135

Профиль | Отправить PM | Цитировать


Массив полностью вернуть из функции нельзя. Можно напрямую работать с массивом через указатели, тогда необходимость возвращать что-нибудь отпадает. Само имя массива по сути дела - всего лишь указатель.

Пример
Код: Выделить весь код
#include<stdio.h>
void copy(int *b, int *c);
void main(){

	int b[5]={0,1,2,3,4};
	int c[5];
	int i;

	copy(b,c);

	for(i=0;i<5;i++)
	  printf("%d\n", c[i]);
}

void copy(int *b, int *c){
	int i;
	for(i=0;i<5;i++)
	  *(c+i)=*(b+i);}

Последний раз редактировалось mrcnn, 10-01-2005 в 05:33.


Отправлено: 05:17, 10-01-2005 | #24


Аватара для vadimiron

Ветеран


Сообщения: 1864
Благодарности: 120

Профиль | Отправить PM | Цитировать


mrcnn
а что значит *(с+i)=*(b+i) ?
c и b - массивы, к элементу массива же вроде так обращаемся: c[i]

Отправлено: 23:28, 11-01-2005 | #25


Аватара для hasherfrog

Старый параноик


Сообщения: 2423
Благодарности: 85

Профиль | Отправить PM | Цитировать


vadimiron
Если очень примитивно объяснять, то указатель + целое == указатель[целое]

Отправлено: 08:18, 12-01-2005 | #26


Ветеран


Сообщения: 1404
Благодарности: 135

Профиль | Отправить PM | Цитировать


Цитата:
mrcnn
а что значит *(с+i)=*(b+i) ?
c и b - массивы, к элементу массива же вроде так обращаемся: c[i]
Я же сделал пометку, что имя массива по сути дела _указатель_ на первый элемент массива, имя массива с указанием номера элемента - _указатель_ на i элемент массива
таким образом конструкция *(c+i) указывает на i элемент массива c. По сути дела *(c+i) аналогично c[i], а *(с+i)=*(b+i) аналогитчно c[i]=b[i]

Отправлено: 08:21, 12-01-2005 | #27



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Вопросы начинающего программиста

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
[решено] нужна помощь программиста. foxbat Программирование в *nix 0 09-11-2009 13:45
iZone для Линукса (Вопросы начинающего) Invite Общий по Linux 30 16-06-2004 14:42
Вопрос начинающего libricon Общий по Linux 11 06-04-2004 23:40
Squid для начинающего djipa Общий по Linux 6 02-12-2003 06:56
Мукулатура для начинающего Daiv Программирование и базы данных 10 17-10-2002 11:44




 
Переход