相关疑难解决方法(0)

C中的int foo(int argc,...)vs int foo()vs int foo(void)

所以今天我认为(int foo()事实上第一次)实际上不同于int foo(void)第一个允许任意数量的输入而第二个允许.

是否int foo()只是忽略任何给定的输入?如果是这样,那么允许这种形式的功能有什么意义呢?如果没有,你怎么能访问它们,这与变量参数列表(例如类似的东西int foo (int argc, ...))有何不同?

c arguments argument-passing

5
推荐指数
1
解决办法
3838
查看次数

当找不到匹配函数时,ac编译器会做什么

请考虑以下代码:

#include<stdio.h>
int f()
{
        printf(" hey ");
        return 5;
}
int main()
{
        printf("hello there %d",f(4,5));
        f(4,5);
        return 0;
}
Run Code Online (Sandbox Code Playgroud)

我期望函数'int f()'的参数太多,但即使在严格的C99编译中也能提供输出.为什么会这样?但似乎C++编译器会出错.

c function c99

4
推荐指数
1
解决办法
167
查看次数

向 c 函数传递超过必需的参数

如果我传递的参数多于函数所需的参数,会发生什么情况?我预计被调用函数中的某些内容会被损坏,但在一些小型测试代码中一切正常。

例如:

void print()
{
    int x=10;
    printf("%d\n",x);
}
void main()
{
    print(0,0,0,0,0);
}
Run Code Online (Sandbox Code Playgroud)

c callstack compilation function-calls

3
推荐指数
1
解决办法
3835
查看次数

C中的malloc和堆

考虑下面的代码:

#include "list.h"
struct List
{
   int size;
   int* data;
};
List *list_create()
{
   List *list;
   printf("%d %d",sizeof(list),sizeof(List));
   list = malloc(sizeof(list));
   assert(list != NULL);
   if (list != NULL) {
      list->size = 0;
   }
   return list;
}
Run Code Online (Sandbox Code Playgroud)

打印出来的数字是“4 8”,我假设这是 List 对象中“int size”占用的 4 个字节?“int* data”的大小为 0 是因为没有分配给数据?int 指针的大小也是 4 个字节,所以 List 类型总共占用 8 个字节?或者还有其他事情发生?有人能帮我详细了解这一切吗?

那么 malloc() 从堆中获取 4 个字节并将地址分配给指针列表?如果我执行“list->data[i]=1;”,则稍后在 main 中 这会给我一个运行时错误为什么?是因为我不能改变堆中的内容吗?但是如果我做“list->size++”这会起作用,不是整个列表对象都在堆中吗?

这里真的需要一些帮助

提前致谢。

c pointers heap-memory

2
推荐指数
1
解决办法
762
查看次数

C++:contructor()和构造函数(void)之间的区别

我注意到,当我在Visual Studio中创建一个新的C++类时,它会写下来Foo(void)~Foo(void)作为构造函数和析构函数模板而不是Foo()~Foo().但是,这两个版本似乎都有效.两者之间是否存在差异,或者根本不使用哪个版本?

c++

2
推荐指数
1
解决办法
131
查看次数

如何将C函数指针迁移到C++?

以下是在C中使用函数指针:

#include <stdio.h>
void bar1(int i){printf("bar1 %d\n", i+1);}
void bar2(int i){printf("bar2 %d\n", i+2);}
void foo(void (*func)(), int i) {func(i);};
int main() {
    foo(bar2, 0);
}
Run Code Online (Sandbox Code Playgroud)

它编译$gcc main.c.

以下是我尝试将其迁移到C++:

#include <cstdio>
void bar1(int i){printf("bar1 %d\n", i+1);}
void bar2(int i){printf("bar2 %d\n", i+2);}
void foo(void (*func)(), int i) {func(i);};
int main() {
    foo(bar2, 0);
}
Run Code Online (Sandbox Code Playgroud)

试图编译它,我得到错误:

$ g++ main.cpp
main.cpp:7:39: error: too many arguments to function call, expected 0, have 1
void foo(void (*func)(), int i) {func(i);};
                                 ~~~~ ^
main.cpp:10:2: error: …
Run Code Online (Sandbox Code Playgroud)

c c++ pointers function-pointers

2
推荐指数
1
解决办法
108
查看次数

`foo()`和`foo(void)`之间的区别

在Java中,这两个函数声明之间有什么区别吗?

public void foo() {/*...*/}

public void foo(void) {/*...*/}
Run Code Online (Sandbox Code Playgroud)

在这里你可以找到这个问题的答案,但对于C/C++.在这些语言中,两种声明风格的存在都是完全合理的.

但是在Java中这有什么意义呢?

java methods

0
推荐指数
1
解决办法
1016
查看次数

有没有参数和C++中的void参数有什么区别?

我最近从Java转向学习C++,我是这种语言的新手,所以我需要你的帮助:)

有什么不同?

void method(void) {

}
Run Code Online (Sandbox Code Playgroud)

void method() {

}
Run Code Online (Sandbox Code Playgroud)

非常感谢!

c++ parameters void

0
推荐指数
1
解决办法
292
查看次数