小编use*_*252的帖子

随机数发生器 - 为什么每次都播种

我是c和c ++的新手.在我用来编程的语言java中,它很容易实现随机数生成.只需从名为Math的类中调用静态随机方法.

int face = ((int)(Math.random() * 6) + 1);
Run Code Online (Sandbox Code Playgroud)

模拟掷骰子......

在c和c ++中,你必须通过调用srand-function 来"播种随机数生成器"

srand ( time(NULL) );
Run Code Online (Sandbox Code Playgroud)

这样做有什么意义 - 我的意思是每次运行代码时都必须为随机数生成器播种?

c c++

17
推荐指数
4
解决办法
2万
查看次数

评论方法c

我想知道是否可以像在java语言中注释代码一样在c中注释方法?

/**
 * 
 * @param x
 * @param y
 * @return
 */
protected boolean myMethod(int x, int y) {



  return true;
}
Run Code Online (Sandbox Code Playgroud)

这与c中的方式相同

 /**
 * 
 * @param x
 * @param y
 * @return
 */
int myMethod(int x, int y) {



  return 1;
}
Run Code Online (Sandbox Code Playgroud)

当然这取决于程序员,但我想知道c程序员是否使用这些@param?

c java comments

6
推荐指数
1
解决办法
151
查看次数

Java中C和System.exit(0)中exit(0)的实践

exit(0)如果有替代方案,在C中使用并不是一种好的做法,因为它不会释放资源.但要System.exit(0)在Java中使用- 它是如何在这里的?在这种情况下,可以信任垃圾收集器吗?

C语言:

 exit(0);
Run Code Online (Sandbox Code Playgroud)

Java的:

 System.exit(0)
Run Code Online (Sandbox Code Playgroud)

c java android garbage-collection exit

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

指针和解引用指针

我在头文件中有这个声明

private:
MyIntegerClass *myArr;
MyIntegerClass myIntegerClass;
MyIntegerClass *ptr_myIntegerClass = &myIntegerClass;
Run Code Online (Sandbox Code Playgroud)

MyIntegerClass是一个具有一个包含整数的数据成员的类.它有两个成员函数 - 一个访问器和一个mutator.

这是Array-class的cpp文件 - 为数组分配内存的类,并使用值填充数组,最后打印数组

Array::Array() {

    myArr = new MyIntegerClass[10];
    for (int i = 0; i < 10; i++) {
           ptr_myIntegerClass->setNumber(i);
           myArr[i] = *ptr_myIntegerClass;
    }
}

Array::~Array() { }

void Array::printArray() {
    for (int i = 0; i < 10; i++) {
        cout << myArr[i].getNumber() << endl;
}
Run Code Online (Sandbox Code Playgroud)

我是C++的新手,我对C有一定的了解,并且通过反复试验使得这个程序能够无错误地编译和打印这些值.但有一些我不明白的事情:

据我所知 - *提前指针意味着你取消引用指针?对?那么myArr这是一个指针存储这个解除引用的值怎么样?或者我错了,这myArr是一个指针?但是为什么*在头文件中用a声明?

c++ arrays pointers

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

未定义的引用...使用 gtk 图形

我正在尝试在我最近制作的 c 程序上实现图形。我的老师推荐了这个链接:

https://developer.gnome.org/gtk-tutorial/2.22/c39.html

我已经安装了 gtk-package 并在 Eclipse 中 - 我已经包含了相关的路径,并且在编译之前乍一看一切似乎都很好。

 #include <gtk/gtk.h>


 int main( int argc,char *argv[] )
{
   GtkWidget *window;

   gtk_init (&argc, &argv);

   window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
   gtk_widget_show  (window);

   gtk_main ();

   return 0;
}
Run Code Online (Sandbox Code Playgroud)

教程中的这个小示例宏应该显示一个 200x200 像素的窗口。但是在编译时出现以下错误:

 C:\Documents and Settings\Ägaren\workspace\cGraphics1\Debug/../src/cGraphics1.c:19:  undefined reference to `gtk_init_abi_check'
 C:\Documents and Settings\Ägaren\workspace\cGraphics1\Debug/../src/cGraphics1.c:21: undefined reference to `gtk_window_new'
 C:\Documents and Settings\Ägaren\workspace\cGraphics1\Debug/../src/cGraphics1.c:22: undefined reference to `gtk_widget_show'
 C:\Documents and Settings\Ägaren\workspace\cGraphics1\Debug/../src/cGraphics1.c:24: undefined reference to `gtk_main'
Run Code Online (Sandbox Code Playgroud)

所以问题是为什么我会收到这些错误?答案可能是我应该使用更多包含头文件的内容吗?如您所见,我只有一个包含。或者可能是因为我需要在编译时链接几个目标文件?在 Eclipse 中,编译参数列表如下所示:

 gcc -o cGraphics1.exe "src\\cGraphics1.o" 
Run Code Online (Sandbox Code Playgroud)

c eclipse gtk3

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

警告:非静态数据成员初始值设定项 - c ++

我用c ++编写了以下程序,得到了一个编译警告:

 warning: non-static data member initializers only available with -std=c++11 or -std=gnu++11 [enabled by default]
Run Code Online (Sandbox Code Playgroud)

这是什么意思?

 struct struct1 {
   int i = 10;
 };

 int main() {
   struct1 s1;
   cout << s1.i;
   return 0;

 }
Run Code Online (Sandbox Code Playgroud)

c++ static

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

从成员函数c ++返回指针

如果我想从成员函数返回一个指针我首先认为语法应如下所示:

 char SecondClass:: *getName() {
   return this->name;
 } 
Run Code Online (Sandbox Code Playgroud)

但是我在Eclipse中收到一条错误消息,它无法解决字段"name".在某种程度上它会隐藏在这种情况下.

这是正确的解决方案

 char *SecondClass:: getName() {
   return this->name;
 }
Run Code Online (Sandbox Code Playgroud)

那就是在classname之前加上*而不是function-name.

所以我的问题是:为什么第一个函数不起作用,这些从成员函数返回指针的实现之间有什么区别?

c++ pointers function

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

初始化header-file中的成员变量

当我在头文件中初始化以下成员变量时,我收到编译警告

private:
  const std::string FILENAME = "prices.txt";
  double *temp = new double[SIZE];
Run Code Online (Sandbox Code Playgroud)

警告:非静态数据成员初始化程序仅适用于-std = c ++ 11或std = gnu ++ 11

我该如何最好地解决这个问题?我应该只在头文件中声明变量,然后在构造函数中初始化它们吗?

c++ initialization header-files

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

原子操作 - 读取和写入是什么意思?

关于并发性,我不了解的一件事是线程和原子操作。根据 docs.oracle 这些操作被指定为原子的:

  • 对于引用变量和大多数原始变量(除 long 和 double 之外的所有类型),读取和写入是原子的。
  • 对于所有声明为 volatile 的变量(包括 long 和 double 变量),读取和写入都是原子的。

但同时 docs.oracle 断言增加变量不是原子操作。我以为这是一个写:

 private int number;
 number++;
Run Code Online (Sandbox Code Playgroud)

显然我不明白“读”和“写”是什么意思。

有人可以解释这一点并举一个“读”和“写”的例子吗?

编辑:在没有同步的情况下执行此操作时,程序会受到“线程干扰”。所以我明白它不是原子的。但是当我更改属于这些线程共享的对象的另一个变量时 - 没有任何干扰。这个对象的共享变量通过一个 mutator 改变。

java atomic

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

在内存中组织c ++程序 - 堆栈和堆

我正在学习c ++,并想知道这样的程序是如何组织在主存储器中的.我知道有一个堆栈(带有堆栈框架)和一个堆.我知道动态分配的东西会在堆上分配它.这是由像malloc或的运营商完成的new.但我不能在这个小型的c ++程序中看到它们.

该程序由一个主类和一个名为的类组成MyClass.这堂课有:

  • 一个构造函数
  • 一个成员变量(int)
  • 一个成员函数

main类定义了一个Myclass对象,并定义了一个指向该对象的指针.

那么 - 这一切如何在记忆中组织起来?

#include <iostream>
using namespace std;

class MyClass {
    int i;
public:
    MyClass(int n) {
        i = n;
    }
    int get_nmbr() {
        return this->i;
    }
};


int main() {
    MyClass myClass(100), *p;
    cout << myClass.get_nmbr() << endl;
    p = &myClass;
    cout << p;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c++ memory heap stack

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