从函数返回后(即在调用函数中),我是否可以访问函数参数?
示例:
void add (float a , float b) {
int c;
c=a+b;
return c;
}
void main () {
add (3,4);
if (a <4 && b<3) // a and b are variable in add functions
printf("a is 4 and b is 3");
}
我在学习递归的时候遇到了这个问题:
FORTRAN implementations do not permit recursion because
a. they use static allocation for variables
b. they use dynamic allocation for variables
c. stacks are not available on all machines
d. it is not possible to implement recursion on all machines.
我发现答案是(a)
但我想知道一种编程语言支持递归应该
Traceback (most recent call last):
File "C:\Users\sahib navlani\Desktop\gfh.py", line 107, in <module>
main()
File "C:\Users\sahib navlani\Desktop\gfh.py", line 98, in main
crit2.play()
File "C:\Users\sahib navlani\Desktop\gfh.py", line 34, in play
sel
今天,一个学生来找我,问我,先生,我们有int,float,char和所有C语言的数据类型。
当我们编写int i时,这意味着对于float f和char c,i是一个variable of type integer,依此类推。
类似地,我们有int *i的意思是i is a pointer to an integer。float *f和char *c也是如此。
我们在C中也有void* v;。
空指针也称为泛型指针。
他问我,既然我们可以有空指针,同样为什么我们不能有void v (作为数据类型)?
我只是说不出话来。所以,我请求您的帮助。如何让他明白。
类必须具有有效的复制或移动构造函数,才能使此语法合法:
C x = factory();
C y( factory() );
C z{ factory() };
在C++03中,通常使用复制省略来防止编译器接触复制构造函数。无论定义是否存在,每个类都有一个有效的副本构造函数签名。
在C++11中,不可复制的类型应该定义C( C const & ) = delete;,使对函数的任何引用都无效,而不管使用什么(不可移动的)。(C++11§8.4.3/2)。例如,GCC在试图按价值归还这样的物品时会抱怨。复制省略不再起作用。
幸运的是,我们还有新的语法来表达意图,而不是依赖于漏洞。fact
假设我有一种用(粗略的) BNF (使用Lisp表示法)定义的高阶语言:
c ::= constants
v ::= variables
e ::= c | v | (if e e e) | (e e_1 e_2 ... e_n) | (fn [v_1 v_2 ... v_n] e)
在上面的示例中,选项(e e_1 e_2 ... e_n)表示将表达式e应用于参数e_1到e_n。
是不是每个用上述语言编写的程序都隐含着“延续传递风格”?如果不是,有何不同?
这个题目几乎就在问题的标题里。我在Meyrse的“有效C++”一书中看到了这一点:
C++按值返回对象的事实
这意味着什么,以及C++标准如何支持该消息?对于实例化来说,假设我们有这样的东西:
int foo()
{
int a = 1;
return a;
}
很明显,这个短语意味着我们返回存储在局部变量中的值的副本。但请考虑这一点:
int& foo()
{
int a = 1;
return a;
}
编译器应该警告我们如何返回对局部变量的引用。“按价值返回事实”如何适用于该示例?
我目前正在学习编程语言的概念和语用,因此我觉得我需要帮助来区分声明性语言家族的两个分支。
考虑下面的代码片段,它们分别用Scheme和Prolog编写:
;Scheme
(define gcd
(lambda (a b)
(cond ((= a b) a)
((> a b) (gcd (- a b) b))
(else (gcd (- b a) a)))))
%Prolog
gcd(A, B, G) :- A = B, G = A.
gcd(A, B, G) :- A >
嘿,小伙子们还在学习c++,只是对移动构造函数和复制构造函数感到有点困惑。
首先,我有一个简单的函数,它为一个对象设置一个值。
#include <iostream>
#include "item.hpp"
#include "player.hpp"
player giveHealth(player user, int value) {
user.set_health(value);
return user;
}
int main() {
player a;
player b(a);
a = gi
我正在Linux上使用IBM ILOG CPLEX12.0Accademy许可和c++,我正在尝试构建我的模型。 我正在一个名为MILP的类中实现它,我想使用MILP的一些成员函数来添加变量、约束和目标函数。 问题是,当我在一个函数中创建一个变量时,我无法在我调用该函数的作用域中访问它。有没有一种方法可以访问变量?它能与IloNumVarArray和IloArray一起工作吗? 下面是这样一个函数的示例: void MILP::allocate_charging_current_variables(IloModel mod){
// just setting parameters for t
我对C编程非常陌生(我关于stackoverflow的第一个问题!)-我试图拼凑一个简单的链表实现,valgrind开始标记错误,声明我使用的是未初始化的值。以下是我的代码,通过一些打印来帮助我了解是什么触发了这个问题:
#include <stdio.h>
struct s
{
int value;
};
struct s *init(int value);
int main(void)
{
struct s *ptr = init(6);
printf("In main, ptr->value=%d\n", ptr->v
为什么printf打印7,尽管变量a是函数fun()的局部变量,并且一旦控制从fun()函数返回,就不应该再存在。
这是c代码。
#include<stdio.h>
main()
{
int *fun();
int *c=fun();
printf("%d",*c);
getch();
}
int *fun()
{
int a=7;
return(&a);
}
输出:7
我正试着得到字符串的第n个字符。我目前使用的是:
char ch = Word[n];
但是,当我构建它时,它会给出以下错误:
错误:下标值既不是数组,也不是指针,也不是向量。
我很困惑为什么我会有这个错误!
我的全部代码是:
#include <stdio.h>
#include <string.h>
#define alpha[] [a b c d e f g h i j k m n o p q r s t u v w x y z]
hash(Word){
char hashed;
int t, length;
length = str
我正在用一些遗留的VB代码编写C#代码,原始的VB代码是:
Shared Function TriangleArea(ByVal side1 As Double, ByVal side2 As Double, ByVal side3 As Double) As Double
Dim halfP As Double
' evaluate half of the perimeter
halfP = (side1 + side2 + side3) / 2
TriangleArea = Math.Sqrt(halfP * (halfP - side1) * (h
我正在用C编写一个python模块,我需要让它使用"reference“传递的一个参数来调用Python函数。最终结果应该是Python函数对参数所做的操作被保存到原始的C变量中。
int *resume; // this int is actually passed in to this body of code
PyObject *resumeInt; // which was originally a C callback func for libnids, but
PyObject *ret; // I removed/rewrote m
我正在尝试创建一个向其传递参数x并返回一个新类C的函数。C应该是固定基类A的子类,只有一个附加内容:添加某个类属性并将其设置为等于x。
换句话说:
class C(A):
C.p = x # x is the parameter passed to the factory function
这很容易做到吗?有什么我应该注意的问题吗?
下面的一些代码
type TUser struct {
Name string
Addr string
}
var UserMap map[int]*TUser //save TUser pointer to map
func LoadUsers() {
... ...
//assume "row" contains the results of table "users" from db
UserMap[0] = &TUser{Name:row["name"], Addr:ro
我只是想弄清楚什么时候是静态或动态类型的编程语言,或者同时是静态类型和动态类型的语言,还是动态类型和动态类型的语言。
我感到困惑的是,如果已知一种语言是静态类型的,而变量的类型是已知的或在编译时定义的,在Java的情况下,即
//Java illustration of statically typed
int x, y; //explicit type declaration
x = 5, y = 10; //Now we use the variables
//Groovy illustration of statically typed
def x, y //explicit
我对C不熟悉。假设我们有一个函数get_float();它应该返回一个浮点值。但是在C中,我们应该先显式声明一个浮点数类型变量,然后再将浮点数赋值给它。
float number = get_float("what's the number");
我想知道为什么要设计这样的规则。
在赋值函数返回值的情况下,如果我们可以声明一个变量而不声明其数据类型,那么它似乎减少了错误。程序员不需要担心他们声明了与函数返回值不匹配的错误数据类型。
number = get_float("what's the number");
有人告诉我,在C (和C++)中,返回语句中的变量在结束函数大括号之前就被销毁了。
前-
int func() {
int a = 10;
return a; // I was told that a is destroyed here
}
真的是这样吗?如果是,函数如何将值返回到调用函数?
我的直觉告诉我,变量值被推到返回值的堆栈上,当它返回到调用函数时,通过获取返回值就会弹出堆栈顶部。不知道我是不是对的。
如果我在python中使用用c编写的lib,比如zlib,我会得到如下错误:
error: Error -3 while decompressing: invalid distance too far back
我该如何处理python的这个异常?据推测,异常是在c模块中定义的,并且没有像except SomeException这样的异常类。
为了通过考试,我编写了这个小程序。它涉及到一种叫做C+-的语言中的抽象类型数据,它是C++的有限版本。在我的大学里使用它是为了提供一种有助于学习和纠正的小语言,没有比C++更多的可能性了。
#include <stdio.h>
//Definimos una estructura, casi una clase, que contiene lo siguiente
typedef struct Calculadora
{
//procesos
float Sumar(float a, float b);
float Restar(float a, flo