C 언어에 대한 질문

 
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);
}

이 구문은 어떻게 작동합니까? f-i 자신 안에? 역시 2번

또한 유익하고 너무 길지 않은 좋은 책을 조언하십시오.

내가 하나가

B. 커니건, D. 리치

C 프로그래밍 언어

3판, 개정판

 

이것은 mql에서도 가능합니다. 함수가 호출될 때 마다가 아니라 두 번 더 호출됩니다. 함수 시작 부분에 반환이 있습니다.

재귀라고 합니다.

https://ru.wikipedia.org/wiki/재귀

https://habr.com/ru/post/275813/

 
Dmitry Fedoseev :

이것은 mql에서도 가능합니다. 함수가 호출될 때 마다가 아니라 두 번 더 호출됩니다. 함수 시작 부분에 반환이 있습니다.

재귀라고 합니다.

https://ru.wikipedia.org/wiki/재귀

https://habr.com/ru/post/275813/

감사합니다, 더 많은 질문이 있을 것입니다 .. 귀하의 조언에 따라 라이브러리 중 하나를 mql로 다시 작성 중입니다))

 
Maxim Dmitrievsky :

또한 유익하고 너무 길지 않은 좋은 책을 조언하십시오.

나는 Stroustrup University에서 읽었지만 언어의 기본 구성에 대한 교과서는 거의 필요하지 않다고 생각합니다. 이미 프로그래밍 경험이 있고 더 이상 처음부터 읽을 필요가 없습니다.

나는 C#으로 작성한 적이 없지만 Windows에서 프로그램을 작성했습니다. C #에 손을 대기로 결정했을 때 온라인 도움말이 많은 도움이 되었고 사소한 질문을 명확히 할 수 있었고 이 리소스에 대한 짧은 기사를 읽었으며 C ++ 재귀에 대해 간략하게 설명했습니다.

https://metanit.com/cpp/tutorial/3.6.php

일반 C++ 튜토리얼 https://metanit.com/cpp/tutorial/ , 이 사이트보다 더 간결한 정보를 찾을 수 있을지 의심스럽습니다. ;)

C++ | Рекурсивные функции
  • metanit.com
Рекурсивные функции - это функции, которые вызывают сами себя. Например, определим вычисление факториала в виде рекурсивной функции: В функции factorial задано условие, что если число n больше 1, то это число умножается на результат этой же функции, в которую в качестве параметра передается число n-1. То есть происходит рекурсивный спуск. И так...
 
Igor Makanu :

나는 Stroustrup University에서 읽었지만 언어의 기본 구성에 대한 교과서는 거의 필요하지 않다고 생각합니다. 이미 프로그래밍 경험이 있고 더 이상 처음부터 읽을 필요가 없습니다.

나는 C#으로 작성한 적이 없지만 Windows에서 프로그램을 작성했습니다. C #에 손을 대기로 결정했을 때 온라인 도움말이 많은 도움이 되었고 사소한 질문을 명확히 할 수 있었고 이 리소스에 대한 짧은 기사를 읽었으며 C ++ 재귀에 대해 간략하게 설명했습니다.

https://metanit.com/cpp/tutorial/3.6.php

이 사이트보다 더 간결한 정보를 찾을 수 있을지 의심스럽습니다.)

네, 그냥 언어를 입력하세요. 주요 어려움은 모든 코드가 포인터와 goto를 통해 작성된다는 것입니다. 메모리 할당과 파괴가 훨씬 더 많습니다.

따라서 mql과 SI는 완전히 다른 언어라고 말할 수 있습니다. 배열 대신 f 번째에 대한 포인터를 전달하는 것과 같은 간단한 구성조차도 더 이상 여기에서 작동하지 않습니다. 다시 작성하는 것은 쓰레기입니다.

 
Maxim Dmitrievsky :

네, 그냥 언어를 입력하세요. 가장 큰 어려움은 모든 코드가 포인터와 goto를 통해 작성된다는 것입니다. 메모리 할당과 파괴가 여전히 많이 필요합니다.

따라서 mql과 SI는 완전히 다른 언어라고 말할 수 있습니다. 배열 대신 f 번째에 대한 포인터를 전달하는 것과 같은 간단한 구성조차도 더 이상 여기에서 작동하지 않습니다. 다시 작성하는 것은 쓰레기입니다.

글쎄, C++에서 흥미로운 점은 포인터로 작업한다는 것입니다. 언어의 모든 유연성을 가지고 있으며 포인터 작업을 기반으로 합니다. 말하자면 프로세서 RAM으로 작업하는 것을 완전히 모방한 것입니다. 프로세서는 식별자의 이름을 모릅니다. (변수 이름), 그러나 상대 오프셋 데이터(본질적으로 메모리 주소에 대한 참조)만 알고 참조에 의한 데이터는 입력해야 합니다 - 이것이 포인터가 하는 일입니다 - 데이터 유형과 데이터가 메모리에 저장되는 위치를 설명합니다


MQL은 실제로 다른 언어입니다.


포인터 https://metanit.com/cpp/tutorial/4.1.php

C++ | Что такое указатели
  • metanit.com
Указатели представляют собой объекты, значением которых служат адреса других объектов (переменных, констант, указателей) или функций. Как и ссылки, указатели применяются для косвенного доступа к объекту. Однако в отличие от ссылок указатели обладают большими возможностями. Для определения указателя надо указать тип объекта, на который указывает...
 
Igor Makanu :

글쎄, C++에서 흥미로운 점은 포인터로 작업한다는 것입니다. 언어의 모든 유연성을 가지고 있으며 포인터 작업을 기반으로 합니다. 말하자면 프로세서 RAM으로 작업하는 것을 완전히 모방한 것입니다. 프로세서는 식별자의 이름을 모릅니다. (변수 이름), 그러나 상대 오프셋 데이터(본질적으로 메모리 주소에 대한 참조)만 알고 참조에 의한 데이터는 입력해야 합니다 - 이것이 포인터가 하는 일입니다 - 데이터 유형과 데이터가 메모리에 저장되는 위치를 설명합니다


MQL은 실제로 다른 언어입니다.


포인터 https://metanit.com/cpp/tutorial/4.1.php

예, 감사합니다. 저는 이미 포인터에 익숙하며 그 책에는

사이트는 편리합니다. 그건 그렇고, 즐겨 찾기에 추가되었습니다.

여기에 c에서 cpp까지 게으른 사람들을 위한 좋은 비디오 강의 과정이 있습니다.


 

다음은 라이브러리 헤더의 예입니다.

구조는 포인터로 생성되며 무엇을 가리키는지 명확하지 않습니다(분명히 이것들은 아직 존재하지 않는 배열임). 그런 다음 내가 이해하는 대로 선언합니다. ..uh .. 이 구조의 변수 mine_score; 같은 이름으로?

 typedef struct mine_score
{
   int n;       /* number of rows of M */
   int *m;     /* number of cols of M[i] for each i */
   double **M; /* the (equi)characteristic matrix */
} mine_score;

이 또한 처리해야 합니다.

그런 다음 결과를 이 변수의 메모리 영역에 직접 쓰는 함수가 선언됩니까?

mine_score *mine_compute_score(mine_problem *prob, mine_parameter *param);
 
Maxim Dmitrievsky :

다음은 라이브러리 헤더의 예입니다.

구조는 포인터로 생성되며 무엇을 가리키는지 명확하지 않습니다(분명히 이것들은 아직 존재하지 않는 배열임). 그런 다음 내가 이해하는 대로 선언합니다. ..uh .. 이 구조의 변수 mine_score; 같은 이름으로?

이 또한 처리해야 합니다.

그런 다음 결과를 이 변수의 메모리 영역에 직접 쓰는 함수가 선언됩니까?

아니요, 여기 mine_score 구조인 mine_score 데이터 유형이 선언됩니다.

그리고 함수는 이 함수 내부에 생성될 이 구조체에 대한 포인터를 반환합니다. 따라서 함수의 목적은 min_score 유형의 엔터티를 만들고 소유권을 함수 호출 범위로 이전하는 것입니다.

 

Maxim Dmitrievsky :

이 또한 처리해야 합니다.

그런 다음 결과를 이 변수의 메모리 영역에 직접 쓰는 함수가 선언됩니까?

MQL이 이러한 성가신 구성을 기억하는 데 도움이 되기 때문에 오래 전에 typedef를 잊어버렸습니다.) 분명히 이것은 단지 mine_score 유형의 선언일 뿐이며, 이는 구조이고 구조에 대한 설명은 유형 선언( typedef ) , 그러나 내가 틀릴 수 있습니다. 여기에 비슷한 질문이 논의되었으며 다소 자세한 설명이 있습니다.

http://stackoverflow.com/questions/13054/typedef-struct-vs-struct-definitions


막심 드미트리예프스키 :

그런 다음 결과를 이 변수의 메모리 영역에 직접 쓰는 함수가 선언됩니까?

C++에서 프로그래머는 메모리 할당을 담당하므로 함수의 결과가 포인터를 반환하면   mine_score * , 이 포인터를 받아들이고 메모리를 할당해야 하는 사람, 즉 변수가 아니라 데이터에 대한 포인터입니다.

Определение typedef struct vs struct
  • 2009.11.04
  • user69514
  • qaru.site
Я новичок в программировании на С, но мне было интересно узнать, какая разница между использованием при определении структуры или использованием . Мне кажется, что нет никакой разницы, они достигают той же цели.
 
Igor Makanu :

MQL이 이러한 성가신 구성을 기억하는 데 도움이 되기 때문에 오래 전에 typedef를 잊어버렸습니다.) 분명히 이것은 단지 mine_score 유형의 선언일 뿐이며, 이는 구조이고 구조에 대한 설명은 유형 선언( typedef ) , 그러나 내가 틀릴 수 있습니다. 여기에 비슷한 질문이 논의되었으며 다소 자세한 설명이 있습니다.

http://stackoverflow.com/questions/13054/typedef-struct-vs-struct-definitions


C++에서 프로그래머는 메모리 할당을 담당하므로 함수의 결과가 포인터를 반환하면   mine_score * , 이 포인터를 받는 사람은 메모리를 할당해야 합니다. 변수가 아니라 데이터에 대한 포인터입니다.

 #include "pch.h"
#include <iostream>

using namespace std;

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

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

함수 내부에 메모리를 할당하고 링크를 전달한 변수 범위에서 해제했습니다.

사유: