关于SI语言的问题

 
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-E "是在其本身之内吗?"2 "也是。

另外,你能推荐一本信息量大且不长的好书吗?

我有一个。

Б.Kernighan, D. Ritchie

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:

另外,建议读一本信息量大且不长的好书。

我在大学时读过Straustrup,但我认为你不需要一本关于基本语言结构的教科书,你已经有了编程经验,你不需要从头开始读。

我从来没有用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:

我在大学时读过Straustrup,但我认为你不需要一本关于基本语言结构的教科书,你已经有了编程经验,你不需要从头读起。

我从来没有用C#写过,但我曾经写过Windows程序。当我决定尝试使用C#时,在线帮助非常有用,任何小问题都能得到澄清,我在这个资源上阅读了一些短文,递归C++在这里有简单的描述

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

我怀疑你会找到比本网站更简洁的信息;)

那里的主要困难是整个代码是通过指针和goto写的,有很多不必要的内存分配和删除的东西。

因此可以说,mql和CY是绝对不同的语言。即使是将指针而不是数组传入函数这样简单的结构在这里也不起作用,它很难重写。

 
Maxim Dmitrievsky:

这门语言很容易上手,主要的困难是所有的代码都是通过指针和Goto写的,还有很多不必要的内存分配和销毁。

这就是为什么很明显,mql和CY是绝对不同的语言。即使是将指针而不是数组传入函数这样简单的结构在这里也不起作用,它很难重写。

这就是C++的有趣之处--它基于与指针的合作。 处理器不知道标识符的名称(变量的名称),它只知道相对的数据偏移量(与内存地址的链接),而且引用的数据需要类型化--这就是指针的作用--它描述数据的类型 以及数据在内存中的存储位置


MQL确实是一种不同的语言


指针https://metanit.com/cpp/tutorial/4.1.php

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

这就是C++的有趣之处--它与指针一起工作,语言的所有灵活性都是基于与指针一起工作--也就是完全模仿与处理器内存一起工作,处理器不知道标识符的名称(变量名),它只知道相对的数据偏移(实际上是对内存地址的引用),通过引用的数据必须被类型化--这就是指针的作用--它描述数据类型 和数据在内存中的存储位置


MQL确实是一种不同的语言


指针https://metanit.com/cpp/tutorial/4.1.php

是的,谢谢,我已经熟悉了指针,而且书中有

顺便说一句,这个网站很方便,我把它加到我的收藏夹里了。

这里有一个适合懒人的视频讲座课程,从c到cp。


 

下面是一个来自库头的例子。

结构是用指向不明确的东西的指针创建的(显然,它们是还不存在的数组),那么我的理解是,这个结构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;

我们也将不得不处理这个问题

然后声明一个f-i,将其结果直接写入这个变量的内存空间?

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

下面是一个来自库头的例子。

结构是用指向不明确的东西的指针创建的(显然,它们是还不存在的数组),那么我的理解是,这个结构mine_score; 的一个......呃......变量被声明为具有相同的名称?

我们也将不得不处理这个问题

然后我们声明一个f-that,将其结果直接写到这个变量的内存位置?

不,这里声明的数据类型是mine_score,它是一个mine_score结构。

而该函数返回一个指向该结构的指针,该结构将在该函数中被创建。因此,该函数的目的是创建一个min_score类型的实体,并将它的所有权转移到函数调用的 范围。

 

Maxim Dmitrievsky:

这也是必须要解决的问题

然后声明一个f-i,将其结果直接写入这个变量的内存空间?

我很久以前就忘记了类型定义,感谢MQL帮助我记住了这些繁琐的结构)),显然这只是对mine_score 类型的声明,它是一个结构,结构描述被 "粘贴 "到类型定义(typedef)中,但我可能是错的,这里有一个类似问题的讨论和相当详细的解释

http://qaru.site/questions/13054/typedef-struct-vs-struct-definitions


马克西姆-德米特里耶夫斯基

然后你声明一个f-i,将其结果直接写进这个变量的内存空间?

在C++中,程序员负责内存分配,因此,如果一个函数的结果返回一个mine_score* 指针,收到这个指针的人必须分配内存,也就是说,它不是一个变量,而是一个数据的 指针

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

我很久以前就忘记了类型定义,幸运的是MQL帮助我记住了这些繁琐的结构)),似乎只是声明了mine_score 的类型,这是一个结构,结构描述被 "粘贴 "到类型定义(typedef)中,但我可能是错的,这里有一个类似问题的讨论和相当详细的解释

http://qaru.site/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;
}

我在函数中分配了内存,并在我传递引用的变量的范围内释放了它。