Вопросы по языку СИ - страница 2

 

Спасибо, уже люблю этот язык

надо немного времени что бы въехать, советы полезные как раз по теме

не знаю важно ли, но у меня с а не с++
 
#include "pch.h"
#include <iostream>
#include <cstdlib>

using namespace std;

int* Foo(int i)
{
        int* x = (int*)malloc (sizeof(int));
        *x = i;
        return x;
}

int main()
{
        int* x = Foo(5);
        cout << *x;
        free (x);
        return 0;
}

А это тоже самое, но только в С стиле.

 

Примеры, кстати, все будут отсюда https://minepy.readthedocs.io/en/latest/libmine.html

ее портирую для разминки

C API — minepy 1.2.4.dev documentation
  • minepy.readthedocs.io
This chapter describes the mine C library. These functions and structures are declared in the header file , located in the folder. You need to add in your C source files and link your program with . Defines¶ EST_MIC_APPROX ¶ Original estimator described in DOI: 10.1126/science.1205438. EST_MIC_E ¶ Estimator described in DOI: arXiv:1505.02213...
 
Vladimir Simakov:

Память я выделил внутри функции, а освободил в области видимости переменной в которую передал ссылку.

я не увидел Ваш пост, видимо Вы писали одновременно со мной, я примерно это же и пытался обьяснить

я 20 лет назад когда учил С++, работу с указателями для себя так запоминал:

- объявили указатель - значение указателя это адрес ячейки памяти

- разыменовали указатель получили значение которое хранится в ячейке памяти по адресу равным указателю

- при разыменовании указателя будет изьято (записано) ровно то количество байтов которое описывает тип указателя, если тип указателя простой ( int, double...) - то соответственно будем работать с 4 или 8 байтами - тут все просто, если у нас сложный тип - структура, то будет произведена аналогичная операция - работа с ячейками памяти, но компилятор проконтролирует соответствие типов и дополнительно "разложит" данные по всем членам структуры


примерно так, как говорится "на пальцах" )))


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

 
Igor Makanu:

я не увидел Ваш пост, видимо Вы писали одновременно со мной, я примерно это же и пытался обьяснить

я 20 лет назад когда учил С++, работу с указателями для себя так запоминал:

- объявили указатель - значение указателя это адрес ячейки памяти

- разыменовали указатель получили значение которое хранится в ячейке памяти по адресу равным указателю

- при разыменовании указателя будет изьято (записано) ровно то количество байтов которое описывает тип указателя, если тип указателя простой ( int, double...) - то соответственно будем работать с 4 или 8 байтами - тут все просто, если у нас сложный тип - структура, то будет произведена аналогичная операция - работа с ячейками памяти, но компилятор проконтролирует соответствие типов и дополнительно "разложит" данные по всем членам структуры


примерно так, как говорится "на пальцах" )))


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

Да нет. Функция вернет указатель на память, которая будет выделена внутри функции. А при разыменовании указателя дополнительного вызова функции не будет ибо указатель и есть значение адреса первого байта сущности в памяти.

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

 
Vladimir Simakov:

Да нет. Функция вернет указатель на память, которая будет выделена внутри функции. А при разыменовании указателя дополнительного вызова функции не будет ибо указатель и есть значение адреса первого байта сущности в памяти.

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

я писал общие принципы как работают указатели, 

ладно, тут нужно остановиться, иначе топикстартера заведем в дебри обсуждения кто и что писал и думал

ЗЫ: я всегда говорю, что совершенно не умею объяснять, вот в примерах, то что я писал https://metanit.com/sharp/tutorial/8.3.php , в Шарпе синтаксис С так же работает

Указатели | C#
  • metanit.com
Если вы программировали на С/С++, то, возможно, вы знакомы с таким понятием как . Указатели позволяют получить доступ к определенной ячейке памяти и произвести определенные манипуляции со значением, хранящимся в этой ячейке. В языке C# указатели очень редко используются, однако в некоторых случаях можно прибегать к ним для оптимизации...
 
Maxim Dmitrievsky:
void quicksort(double *a, int *idx, int l, int u)
{
  int i, m, idx_temp;
  double a_temp;

  if (l >= u)
    return;

  m = l;
  for (i=l+1; i<=u; i++)
    {
      if (a[i] < a[l])
        {
          ++m;

          idx_temp = idx[m];
          idx[m] = idx[i];
          idx[i] = idx_temp;

          a_temp = a[m];
          a[m] = a[i];
          a[i] = a_temp;
        }
    }

  idx_temp = idx[l];
  idx[l] = idx[m];
  idx[m] = idx_temp;

  a_temp = a[l];
  a[l] = a[m];
  a[m] = a_temp;

  quicksort(a, idx, l, m-1);
  quicksort(a, idx, m+1, u);
}

А так не проще?:

#python

list.sort()

Посмотрите обязательно https://www.youtube.com/watch?v=vHeeXI84GIA

Хватит уже метаться со статьи на статью с языка на язык, возьмите себя в руки

 
Кеша Рутов:

А так не проще?:

#python

list.sort()

Посмотрите обязательно https://www.youtube.com/watch?v=vHeeXI84GIA

Хватит уже метаться со статьи на статью с языка на язык, возьмите себя в руки

А как вы думаете, сам питон откуда взялся?

Обязательно посмотрел... и исследовал ссылки дальше, нашел - "В ШКОЛЕ БОЛЕЕ 10-ТИ СУТОК ВИДЕО УРОКОВ".. поржал... пошел дальше))

 
Dmitry Fedoseev:

А как вы думаете, сам питон откуда взялся?

Обязательно посмотрел... и исследовал ссылки дальше, нашел - "В ШКОЛЕ БОЛЕЕ 10-ТИ СУТОК ВИДЕО УРОКОВ".. поржал... пошел дальше))

Ну ну, пишите на Си, а лучше сразу на Асемблере, торговые системы и машинное обучение, поговорим лет через 100, в следующей жизни, когда напишете первый прототип...


ЗЫ Я то не против Си и ASM, другой вопрос для каких целей? Дрова, ОС, контролеры, новые ЯП и тп. тут без вариантов, но прикладной софт на Си это жестко, на Си толком нет потоков, всё разное для разных ОС, это же не форум писателей дров и вирусов, для ТС и МО мировой стандарт это питон, в крайнем случае ява\сишарп. А максим это известный интернет-сёрфер, просто лазит в поисках "интересненького", как дошкольник, то туда, то сюда, читает анотации, хапает вумные слова чтобы казаться наукообразным и ищет дальше, ничем хорошим такая деятельность не заканчивается, для взрослого мужика, обмануть можно только себя. Скорей бы у него кончились источники дохода и он столкнулся с ЖИЗНЬЮ, а его бы и на "трейни" за не взяли бы даже в провинциальную контору, бесплатно, пришлось бы в сферу обслуги идти, где тоже жесткая конкуренция, но хотя бы протрезвел

 
Кеша Рутов:

Ну ну, пишите на Си, а лучше сразу на Асемблере, торговые системы и машинное обучение, поговорим лет через 100, в следующей жизни, когда напишете первый прототип...


ЗЫ Я то не против Си и ASM, другой вопрос для каких целей? Дрова, ОС, контролеры, новые ЯП и тп. тут без вариантов, но прикладной софт на Си это жестко, на Си толком нет потоков, всё разное для разных ОС, это же не форум писателей дров и вирусов, для ТС и МО мировой стандарт это питон, в крайнем случае ява\сишарп. А максим это известный интернет-сёрфер, просто лазит в поисках "интересненького", как дошкольник, то туда, то сюда, читает анотации, хапает вумные слова чтобы казаться наукообразным и ищет дальше, ничем хорошим такая деятельность не заканчивается, для взрослого мужика, обмануть можно только себя. Скорей бы у него кончились источники дохода и он столкнулся с ЖИЗНЬЮ, а его бы и на "трейни" за не взяли бы даже в провинциальную контору, бесплатно, пришлось бы в сферу обслуги идти, где тоже жесткая конкуренция, но хотя бы протрезвел

А чем Вас С++ начиная с 11-го стандарта не угодил? Про С согласен, но современные плюсы очень даже нормально смотрятся. Просто С/С++ ближе к железу и надо помнить об этом а не только в таком стиле писать: "Эй, железка, на тебе это, верни мне то". В конечном итоге, весь этот функционал либо в том или ином виде уже есть в STL, либо без проблем реализуется, а вот прямая работа с памятью во всех этих фреймворках не факт, что возможна.

Причина обращения: