我对编程有点陌生(好吧,非常新),我遇到了扩展巴科斯诺尔范式(EBNF),并决定尝试弄清楚如何使用它。不幸的是,尽管网上有大量关于 EBNF 如何工作的解释,但关于如何实际实现它的却很少。所以我使用它用 C 语言编写了一个简单的小程序,只是为了看看会发生什么。这是我写的:
#include <stdio.h>
#include <stdlib.h>
mixture : [letter|digit] {letter | digit};
integer : [ "+"|"-"] digit {digit};
naturalNumber : digit {digit};
digit : "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9";
letter : "a" | "b" | "c" | "d" | "e" | "f" | "g" | "h" | "i" | "j" | "k" | "l" | "m" | "n" | "o" | "p" | …Run Code Online (Sandbox Code Playgroud) int x=10;
int *p;
p=&x;
int **pp=&p;
cout<<**pp<<"\n"<<*p<<"\n"<<pp<<"\n"<<&p<<"\n";
Run Code Online (Sandbox Code Playgroud)
在上述情况下一切顺利,但是当我改变声明指针 p 的方式时:
int x=10;
int *p;
*p=x;
int **pp=&p;
cout<<**pp<<"\n"<<*p<<"\n"<<pp<<"\n"<<&p<<"\n";
Run Code Online (Sandbox Code Playgroud)
它没有给出任何输出。这是为什么?
这两种方式有什么变化呢?
int *ptr和int* ptr
两者的工作方式相同,但是对于我的代码或性能,我的程序有差异吗?
#include <iostream>
using namespace std;
int main() {
int a(5);
int *ptr1 = &a;
int* ptr2 = &a;
cout << "a: (0x" << hex << uppercase << (uintptr_t)&a << ") = " << dec << a << endl;
cout << "ptr1: (0x" << hex << uppercase << (uintptr_t)ptr1 << ") = " << dec << *ptr1 << endl;
cout << "ptr2: (0x" << hex << uppercase << (uintptr_t)ptr2 << ") = " << …Run Code Online (Sandbox Code Playgroud) 我在某个地方找到了这个并一直在我的代码中使用它。
我不确定为什么要加上大括号和尾随括号。它们有必要吗?他们在做什么?我不知道在 Swift 文档中哪里可以找到它。
var textField = { UITextField.textFieldWithInsets(insets: UIEdgeInsets(top:0, left:5, bottom:0, right:15)) }()
Run Code Online (Sandbox Code Playgroud) 我是 GO 的菜鸟,刚刚开始学习这门语言。为什么这样可以:
const name, age = "Kim", 22
但这不是
const name, age := "Kim", 22
我正在使用 Eclipse,当我导航 List.class 的反汇编时,我看到了这个:
<T> T[] toArray(T[] a);
Run Code Online (Sandbox Code Playgroud)
这里的领先<T>实际上意味着什么?它是返回类型的一部分吗?我猜返回值是T[].
在什么情况下函数需要声明 like<T> T[]作为函数签名?
当我们通常声明一个变量时,我们会指定它的类型。
如果我们不指定内联声明变量的类型,会发生什么情况?是根据收到的值来分配的吗?
例如:
Ex.1 这里我们通过传入的值来获取字符串类型?
DATA(lv_name) = 'Testing Value'.
Run Code Online (Sandbox Code Playgroud)
Ex.2 这里我们得到lt_maraTYPE TABLE OF mara?
SELECT * FROM mara
INTO TABLE @DATA(lt_mara) UP TO 10 ROWS.
Run Code Online (Sandbox Code Playgroud)
我对这个问题的理解正确吗?
我正在尝试在 Haskell 中使用类声明构建自己的计算器。
首先,我试图实现添加,但这里出现错误:
无法将预期类型“Exp -> Double”与实际类型“Exp”匹配
data Exp = Number Double | Add Exp Exp
class Calc a where
calculate :: a -> a -> Double
instance Calc Exp where
calculate (Add a b) = a + b
Run Code Online (Sandbox Code Playgroud)
我必须改变什么?
各位编码员..
我只是一个新学习者,尝试在特定的设计环境中练习一些编程范例。最近我在Ada语言过程编程中学到了很多新的小东西,并且有很好的学习经验。但是,我自己找不到答案,为什么 Ada;在子程序声明中使用分号来分隔参数。
-- subprogram declaration - - - - - - - - -
procedure Initialize_Some_Things
( Result : out Integer
; Asset : in Integer
; Option: in Integer ) is
begin
null;
end Initialize_Some_Things;
-- invoking subprogram - - - - - - - - -
Instance : Integer := 0;
Initialize_Some_Things (Instance, 9, 5);
Run Code Online (Sandbox Code Playgroud)
对于来自任何其他编程语言的人来说,在子程序声明中使用分号来分隔参数显然很奇怪。更奇怪的是,当子程序的调用需要使用逗号,而不是;声明中的分号时。我搜索了相关问题一段时间,但在谷歌上找不到任何结果。无论如何,是否可以提交请求以对语言的标准规范进行这种微妙的更改?
我在 Google 上没有找到相关问题。我希望我能在这里找到。
我正在编写一个 Delphi 应用程序,其中有一个清除表单并将其重置为默认状态的过程。
procedure ResetForm ();
begin
edtG1.Text := ''; // Error occurs on this line, no matter what the instruction is.
edtG1.Enabled := True;
btnG1Check.Enabled := True;
.
.
.
.
end;
Run Code Online (Sandbox Code Playgroud)
我已经尝试了一切 - 无论如何,程序中的第一行代码都无法编译。我也看不出程序声明有任何问题。
有人可以帮忙吗?我的谢谢。
我试图清除表单中的所有字段,启用已禁用的内容等。将其重置为默认状态,因为它在程序开始时启动。我在第一行尝试了不同的代码指令(是的,edtG1存在),其他控件执行完全相同的操作以及所有其他指令。我也尝试过重命名该过程,但无济于事。