Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/12: Рейтинг темы: голосов - 12, средняя оценка - 4.67
Александрррррпд
3 / 3 / 1
Регистрация: 17.09.2017
Сообщений: 355
1

Динамическое выделение памяти

13.10.2018, 11:05. Просмотров 2327. Ответов 9
Метки нет (Все метки)

C
1
2
3
4
5
6
7
8
9
10
11
12
int *a = (int*)malloc(n * sizeof(int));
 
int *a // это тип указателя
 
(int* ) // зачем вот это нужно?
 
malloc // возращает указатель 
 
n * sizeof(int) // выделяется память в байтах 
 
 
int *a = malloc(n * sizeof(int)); // если я вот так запишу что произойдёт?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.10.2018, 11:05
Ответы с готовыми решениями:

Динамическое выделение памяти в С
Ввести num - количество массивов. Ввести размерность очередного массива и его элементы целого типа,...

Динамическое выделение памяти
Приветствую. Имеется код: #include <stdio.h> #include <stdlib.h> typedef struct{ int...

Динамическое выделение памяти
Всем привет! Решил вот разобраться с выделением памяти.В общем выделяем память для двух матриц...

Динамическое выделение памяти
Прошу помощи опытных программистов, изначально размеренность динамического массива равна 2 и если...

Динамическое выделение памяти
задали задание по Си, сделать через динамическое выделение памяти. эту тему пропустил. читал...

9
VTsaregorodtsev
591 / 546 / 79
Регистрация: 19.02.2010
Сообщений: 1,979
13.10.2018, 11:11 2
5. Приведение возвращаемого функцией malloc указателя типа void* (т.е. неспецифицированного по типу данных) к нужному типу int*.
12. Компилятор ругнётся на несоответствие типов.
0
Croessmah
++Ͻ
15306 / 8681 / 1657
Регистрация: 27.09.2012
Сообщений: 21,401
Записей в блоге: 2
Завершенные тесты: 1
13.10.2018, 14:29 3
Лучший ответ Сообщение было отмечено Александрррррпд как решение

Решение

Цитата Сообщение от VTsaregorodtsev Посмотреть сообщение
12. Компилятор ругнётся на несоответствие типов.
Это в C++ ругнется, т.к. в C++ неявное преобразование из
void * запрещено, а в C это разрешенная операция.

Цитата Сообщение от Александрррррпд Посмотреть сообщение
если я вот так запишу что произойдёт?
Ничего, просто код будет меньше и в глазах рябь пройдет.
1
Александрррррпд
3 / 3 / 1
Регистрация: 17.09.2017
Сообщений: 355
14.10.2018, 06:43  [ТС] 4
Допустим если я здесь убрал (int*) это вообще для чего нужно? чтобы показать кого типа указатель вернуть?
C
1
int *a = malloc(n * sizeof(int))
0
14.10.2018, 06:43
stake-k26
658 / 455 / 349
Регистрация: 25.04.2016
Сообщений: 1,309
14.10.2018, 10:00 5
Лучший ответ Сообщение было отмечено Александрррррпд как решение

Решение

Александрррррпд, вам же уже написали.. если вы компилируете код компилятором си, то код прекрасно будет работать и без приведения типа. Но в с++ будет выдавать ошибку.

Croessmah, а MSVC - это си или с++ ? Я тут недавно заметил, что даже не самые глупые программисты путают.
1
Александрррррпд
3 / 3 / 1
Регистрация: 17.09.2017
Сообщений: 355
14.10.2018, 10:12  [ТС] 6
тогда если не приводить тип указатель кого типа вернёт malloc? или без разницы какого типа указатель
0
Croessmah
++Ͻ
15306 / 8681 / 1657
Регистрация: 27.09.2012
Сообщений: 21,401
Записей в блоге: 2
Завершенные тесты: 1
14.10.2018, 11:47 7
Лучший ответ Сообщение было отмечено Александрррррпд как решение

Решение

Цитата Сообщение от stake-k26 Посмотреть сообщение
Croessmah, а MSVC - это си или с++ ?
Если не ошибаюсь, то студия в зависимости от расширения
файла выбирает компилировать код как C или C++.
Но могу ошибаться, так как не пользуюсь ей.
Цитата Сообщение от Александрррррпд Посмотреть сообщение
Допустим если я здесь убрал (int*) это вообще для чего нужно?
malloc возвращает void *,
а инициализация идет переменной типа int *,
а значит необходимо преобразование из void * в int *.
Преобразование это может быть как явным, так и неявным.

Когда Вы пишите (int *), вы делаете явное преобразование типа.
Явное преобразование из void * в int * разрешено как в C, так и в C++.

Если не напишите (int *), то преобразование будет неявное.

В языке C неявное преобразование из void * в int * разрешено,
поэтому делать явное преобразование можно, но в этом нет никакой необходимости.

В языке C++ неявное преобразование из void * в int * запрещено,
поэтому отсутствие явного преобразования приведет к ошибке компиляции.
1
Александрррррпд
3 / 3 / 1
Регистрация: 17.09.2017
Сообщений: 355
14.10.2018, 14:28  [ТС] 8
получается если я делаю неявное преобразование то компилятор сам преобразуют к типу int так как у меня указатель типа int?
0
Croessmah
++Ͻ
15306 / 8681 / 1657
Регистрация: 27.09.2012
Сообщений: 21,401
Записей в блоге: 2
Завершенные тесты: 1
14.10.2018, 21:53 9
Цитата Сообщение от Александрррррпд Посмотреть сообщение
если я делаю неявное преобразование
Оно называется неявным, потому что происходит без Вашего участия.

Давайте вообще выбросим из головы указатели и посмотрим на другие типы.

C
1
2
int x = 10;//переменная типа int
double y = x;//инициализация переменной типа double значением переменной типа int
Типы x и y отличаются, и нужно преобразовать
значение переменной x к значению типа double.
Язык C разрешает неявное преобразование значений типа int в значения типа double,
и преобразование происходит без Вашего непосредственного участия.
Однако, никто Вам не запрещает сделать это преобразование явно:
C
1
2
double y = 
    (double)x;//явное преобразование
Что от этого изменилось в данном случае?
0
Александрррррпд
3 / 3 / 1
Регистрация: 17.09.2017
Сообщений: 355
14.10.2018, 23:07  [ТС] 10
Цитата Сообщение от Croessmah Посмотреть сообщение
Что от этого изменилось в данном случае?
ничего не изменится
0
14.10.2018, 23:07
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.10.2018, 23:07

Динамическое выделение памяти
Пользователь вводит число. Программа динамически выделяет массив типа char размера n, c помощью...

Динамическое выделение памяти
Здравствуйте! Хочу часть кода,где динамически выделяется память под массив: double *darr; ...

Динамическое выделение памяти
Необходимо выделить память с помощью функции melloc под 5 символов char. При вводе пользователем...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru