Как назначить значение double * для double * queue [i]? - PullRequest
0 голосов
/ 06 апреля 2020

Я хотел бы присвоить целое число 1 двойной * очереди [i] .. Мне нужно сначала преобразовать int 1 в двойное * значение типа, прежде чем я смогу назначить его в очередь [i] .. Как кодировать это? *

Ответы [ 2 ]

0 голосов
/ 06 апреля 2020

Хотите ли вы назначить прямой адрес переменной-указателю? Вам лучше использовать операторы & или +, ++ для известных функций или переменных, чтобы получить адреса. Это небезопасно и не рекомендуется жестко кодировать адрес в коде. Каждый раз, когда программа загружается в память, это может быть другое пространство памяти, поэтому жестко закодированный адрес вызовет ошибку сегментации.

См. Следующий пример. Назначение queue[1] или queue[2] не рекомендуется.

#include <stdio.h>
#define MAX_SIZE 10

void print(double *p, int i)
{
    printf("queue[%d]=%p\t*queue[%d]=%.2f\n", i, p, i, *p);
}

int main()
{
    double *queue[MAX_SIZE];
    double dval = 3.5f;
    int ival = 1;

    queue[0] = &dval;
    print(queue[0], 0); 
    // queue[0]=0x7ffee2bfca20  *queue[0]=3.50

    queue[1] = &ival;
    print(queue[1], 1); 
    // queue[1]=0x7ffee2bfca1c  *queue[1]=0.00

    queue[2] = ((double *)1);
    print(queue[2], 2); 
    // zsh: segmentation fault

    return 0;
}
0 голосов
/ 06 апреля 2020

Я хотел бы присвоить целое число 1 двойной * очереди [я]

Я думаю, вы хотели добавить значение 1 в свою очередь:

queue[i] = new double(1.0);

Назначение прямого адреса - это другая история .

Мне нужно сначала преобразовать значение типа int 1 в double * type, прежде чем я смогу назначить его в очередь [i]

Это не то, как работает ваш динамик c queue. Он хранит адрес вновь выделенной памяти для каждого double. Для этой цели используется оператор new, который возвращает необходимый указатель, вам просто нужно правильно выполнить динамическое выделение памяти c.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...