Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.12.2011, 12:42   #1
datgen
Пользователь
 
Регистрация: 30.03.2011
Сообщений: 36
По умолчанию указатели

как в функцию передать массив по указателю.подскажите пожалуйста.
datgen вне форума Ответить с цитированием
Старый 15.12.2011, 13:05   #2
Mandrivnyk
Software Developer
Участник клуба
 
Аватар для Mandrivnyk
 
Регистрация: 01.03.2011
Сообщений: 1,098
По умолчанию

А поконкретнее можно?
Размерность массива, тип -- статический или динамический, как объявлен...
Болтовня ничего не стоит. Покажите мне код. (c) Linus Torvalds
Помог ответ? -- Поставьте отзыв.
Выражения особой благодарности в рублевом эквиваленте отправлять сюда --> R269634919062
Mandrivnyk вне форума Ответить с цитированием
Старый 15.12.2011, 13:14   #3
Rififi
Старожил
 
Регистрация: 19.08.2009
Сообщений: 2,119
По умолчанию

datgen

как в функцию передать массив по указателю.подскажите пожалуйста.

скорее всего, тебе это не нужно.
в большинстве случаев достаточно передать указатель на первый элемент массива (имя массива может быть автоматически преобразовано к такому указателю) и количество элементов:

Код:
void f(int* begin, size_t n) {}

int a[10];
f(a, 10);
если же у тебя все по сурьёзному, и ты чОтко понимаешь, что делаешь, то...

Код:
void f(int (*arr)[10]) {}

int a[10];
f(&a);
Rififi вне форума Ответить с цитированием
Старый 15.12.2011, 13:47   #4
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,323
По умолчанию

> Rififi
Не получается. Выдаётся предупреждение:
Цитата:
warning C4024: func: различные типы для формального и фактического параметров 1
Код:
#include <stdio.h>
#include <stdlib.h>

#define MAXARR 5

int main(int argc) {
    void func (int (*parr[MAXARR]));
    int a[MAXARR] = {5, 3, 6, 21, 5};

    func(&a);

    return 0;
}

void func (int (*parr[MAXARR])) {
    int i;
    for (i = 0; i < MAXARR; i++) {
        printf((i < MAXARR-1) ? "%d " : "%d\n", **(parr++));
    }
}
8Observer8 вне форума Ответить с цитированием
Старый 15.12.2011, 14:00   #5
Mandrivnyk
Software Developer
Участник клуба
 
Аватар для Mandrivnyk
 
Регистрация: 01.03.2011
Сообщений: 1,098
По умолчанию

Код:
#include <stdio.h>
#include <stdlib.h>

#define MAXARR 5

void func (int *parr);

int main()
{
    int a[MAXARR] = {5, 3, 6, 21, 5};

    func(a);

    return 0;
}

void func (int *parr)
{
    int i;
    for (i = 0; i < MAXARR; i++)
    {
        printf((i < MAXARR-1) ? "%d " : "%d\n", *(parr++));
    }
}
Болтовня ничего не стоит. Покажите мне код. (c) Linus Torvalds
Помог ответ? -- Поставьте отзыв.
Выражения особой благодарности в рублевом эквиваленте отправлять сюда --> R269634919062
Mandrivnyk вне форума Ответить с цитированием
Старый 15.12.2011, 14:08   #6
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,323
По умолчанию

Цитата:
Сообщение от Mandrivnyk Посмотреть сообщение
Код:
#include <stdio.h>
#include <stdlib.h>

#define MAXARR 5

void func (int *parr);

int main()
{
    int a[MAXARR] = {5, 3, 6, 21, 5};

    func(a);

    return 0;
}

void func (int *parr)
{
    int i;
    for (i = 0; i < MAXARR; i++)
    {
        printf((i < MAXARR-1) ? "%d " : "%d\n", *(parr++));
    }
}
> Mandrivnyk
Я хочу передавать указатель на массив, а не указатель на нулевой элемент массива. Как показал Rififi:
Цитата:
Сообщение от Rififi Посмотреть сообщение
Код:
void f(int (*arr)[10]) {}

int a[10];
f(&a);
8Observer8 вне форума Ответить с цитированием
Старый 15.12.2011, 14:12   #7
Rififi
Старожил
 
Регистрация: 19.08.2009
Сообщений: 2,119
По умолчанию

8Observer8

Не получается. Выдаётся предупреждение:

Сравни внимательно примеры, обратив особое внимание на расположение звездочек, скобочек и прочих всяких закорючек.

ps. а также, наверное, стоит записаться на приём к окулисту... :lol:
Rififi вне форума Ответить с цитированием
Старый 15.12.2011, 14:25   #8
Mandrivnyk
Software Developer
Участник клуба
 
Аватар для Mandrivnyk
 
Регистрация: 01.03.2011
Сообщений: 1,098
По умолчанию

Код:
#include <stdio.h>
#include <stdlib.h>

#define MAXARR 5

void func (int (*parr)[MAXARR]);

int main()
{

    int a[MAXARR] = {5, 3, 6, 21, 5};

    func(&a);

    return 0;
}

void func (int (*parr)[MAXARR])
{
    int i;
    for (i = 0; i < MAXARR; i++)
    {
        printf((i < MAXARR-1) ? "%d " : "%d\n", *(*parr + i));
    }
}
ЗЫ Не знаю, зачем тебе это надо, но "месье знает толк в извращениях..." (с)
Болтовня ничего не стоит. Покажите мне код. (c) Linus Torvalds
Помог ответ? -- Поставьте отзыв.
Выражения особой благодарности в рублевом эквиваленте отправлять сюда --> R269634919062
Mandrivnyk вне форума Ответить с цитированием
Старый 15.12.2011, 14:29   #9
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,323
По умолчанию

> Rififi
С зрением у меня всё отлично, а вот с пониманием и вниманием не очень. Но сейчас разобрался. Спасибо.
Код:
#include <stdio.h>
#include <stdlib.h>

#define MAXARR 5

int main(int argc) {
    void func (int (*parr)[MAXARR]);
    int a[MAXARR] = {5, 3, 6, 21, 5};

    func(&a);

    return 0;
}

void func (int (*parr)[MAXARR]) {
    int i;
    for (i = 0; i < MAXARR; i++) {
        printf((i < MAXARR-1) ? "%d " : "%d\n", (*parr)[i]);
    }
}
8Observer8 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Указатели vrtp Общие вопросы C/C++ 6 08.11.2011 01:33
Указатели GrihaI Общие вопросы C/C++ 11 06.05.2010 18:53
указатели в С++ Aleksa_ks Помощь студентам 3 27.04.2010 19:31
C++ указатели. tshen Помощь студентам 3 16.04.2010 22:00
[C] массивы, указатели, двойные указатели. Iggel Общие вопросы C/C++ 5 05.05.2009 12:39