Форум программистов, компьютерный форум CyberForum.ru

Командная строка. Безтиповой указатель. - C++

Восстановить пароль Регистрация
 
SashaPinsk
 Аватар для SashaPinsk
39 / 37 / 2
Регистрация: 27.12.2009
Сообщений: 73
05.01.2010, 23:44     Командная строка. Безтиповой указатель. #1
Вот примерная прога которая должна запускаться на борланде. Вопрос в следующем можно ли написать эту ф-цию для среды Visual(проблема заключается в наращивании шага безтипового указателя) Заранее спасибо.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
//функция для нахождения среднего арифметического чисел типа float.
double arithmetic1(double k,...)
{
    void *p;
    double sum=0;
    p=(double*)&k;
    ((double*)p)+=1;
    for(int i=0; i<k; i++)
    {
        sum+=*(double*)p;
        (double*)p+=1;
    }
    return sum/k;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.01.2010, 23:44     Командная строка. Безтиповой указатель.
Посмотрите здесь:

Командная строка в С++ C++
C++ командная строка
командная строка C++
C++ Командная строка.
Командная строка C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Андрейка
410 / 214 / 24
Регистрация: 25.03.2009
Сообщений: 716
05.01.2010, 23:52     Командная строка. Безтиповой указатель. #2
SashaPinsk, а вам не кажется тут много не нужного ? создавать указатель void потом преобразовывать в double потом смещать по памяти..
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
06.01.2010, 15:37     Командная строка. Безтиповой указатель. #3
вот так читает входные данные из командной строки
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include <stdio.h>
#include <stdlib.h>
    
double average(double *arr, size_t count){
    double avg = 0.0;
    size_t i;
    
    for ( i = 0; i < count; ++i )
        avg += arr[i];
    
    return avg / (double)count;
}
 
int main(int argc, char** argv){
    size_t i, count;
    double *arr;
    
    if ( argc < 2 ){
        printf("Usage: %s doubleval1 doubleval2 doubleval3...\n", argv[0]);
        exit(0);
    }
    
    count = argc - 1;
    ++argv;
    if ( ( arr = (double*)calloc(count, sizeof(double)) ) == NULL ){
        perror("Bad memory!\n");
        exit(1);
    }
    for ( i = 0; i < count; ++i )
        arr[i] = atof(argv[i]);
    
    printf("Array: ");
    for ( i = 0; i < count; ++i )
        printf("%.1f ", arr[i]);
    printf("\nAverage value: %.1f\n", average(arr, count));
    
    return 0;
}
SashaPinsk
 Аватар для SashaPinsk
39 / 37 / 2
Регистрация: 27.12.2009
Сообщений: 73
10.01.2010, 10:51  [ТС]     Командная строка. Безтиповой указатель. #4
Большое спасибо за то что уделили время этой проге(кстати вся соль и заключалась в работе с бестиповым указателем). Я её уже решил.
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16828 / 5249 / 321
Регистрация: 30.03.2009
Сообщений: 14,138
Записей в блоге: 26
10.01.2010, 11:18     Командная строка. Безтиповой указатель. #5
Андрейка, он не волшебник, он только учится


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

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void *p;
double *dp;
...
/* Где-то сформировал p */
p = 
...
/* Далее этот указатель переписываем в другую переменную
 * нужного типа и работаем без плясок с бубнами */
dp = (double*) p;
for (int i=0; i<k; i++)
{
  sum += *dp;
  dp++;
}
Это по части работы с указателем void*

Что касается выковыривания параметров в процедуре с тремя точками, то у тебя в принципе сделан неправильный код. Для этих целей нужно использовать va_arg, потому как то, что у тебя написано, будет работать только на одной платформе (а иногда ещё и только на одном компиляторе), т.к. схема передачи параметров в процедуры на каждой платформе своя (в том числе параметры могут передаваться и на регистрах)
SashaPinsk
 Аватар для SashaPinsk
39 / 37 / 2
Регистрация: 27.12.2009
Сообщений: 73
25.01.2010, 13:08  [ТС]     Командная строка. Безтиповой указатель. #6
Цитата Сообщение от Андрейка Посмотреть сообщение
SashaPinsk, а вам не кажется тут много не нужного ? создавать указатель void потом преобразовывать в double потом смещать по памяти..
Такое получил задание поэтому так и делал, а не ради личной забавы. Но я уже её давно написал, но спасибо за интерес.
Yandex
Объявления
25.01.2010, 13:08     Командная строка. Безтиповой указатель.
Ответ Создать тему
Опции темы

Текущее время: 15:36. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru