我是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)
这样做有什么意义 - 我的意思是每次运行代码时都必须为随机数生成器播种?
我想知道是否可以像在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?
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) 我在头文件中有这个声明
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和ptr_myIntegerClass都是指针.但是以下怎么可能是正确的:
myArr[i] = *ptr_myIntegerClass;
Run Code Online (Sandbox Code Playgroud)据我所知 - *提前指针意味着你取消引用指针?对?那么myArr这是一个指针存储这个解除引用的值怎么样?或者我错了,这myArr是一个指针?但是为什么*在头文件中用a声明?
我正在尝试在我最近制作的 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 ++编写了以下程序,得到了一个编译警告:
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) 如果我想从成员函数返回一个指针我首先认为语法应如下所示:
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.
所以我的问题是:为什么第一个函数不起作用,这些从成员函数返回指针的实现之间有什么区别?
当我在头文件中初始化以下成员变量时,我收到编译警告
private:
const std::string FILENAME = "prices.txt";
double *temp = new double[SIZE];
Run Code Online (Sandbox Code Playgroud)
警告:非静态数据成员初始化程序仅适用于-std = c ++ 11或std = gnu ++ 11
我该如何最好地解决这个问题?我应该只在头文件中声明变量,然后在构造函数中初始化它们吗?
关于并发性,我不了解的一件事是线程和原子操作。根据 docs.oracle 这些操作被指定为原子的:
但同时 docs.oracle 断言增加变量不是原子操作。我以为这是一个写:
private int number;
number++;
Run Code Online (Sandbox Code Playgroud)
显然我不明白“读”和“写”是什么意思。
有人可以解释这一点并举一个“读”和“写”的例子吗?
编辑:在没有同步的情况下执行此操作时,程序会受到“线程干扰”。所以我明白它不是原子的。但是当我更改属于这些线程共享的对象的另一个变量时 - 没有任何干扰。这个对象的共享变量通过一个 mutator 改变。
我正在学习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)