如果以下分配有效:
int a[2] = {1,2};
int* b = a;
Run Code Online (Sandbox Code Playgroud)
那么这有什么问题:
int a[2][2]={1,2,3,4};
int** b = a;
Run Code Online (Sandbox Code Playgroud)
C++提供了一个错误,它无法转换int[][]到int**.两者有什么类型之间的区别,如果int[]是一样的int*?
<new>标题中new的定义是:
void* operator new(size_t);
Run Code Online (Sandbox Code Playgroud)
malloc的定义如下:
void* malloc(size_t);
Run Code Online (Sandbox Code Playgroud)
现在,由于C++是一种强类型语言,它需要程序员的强制转换才能将void*指针转换为程序员所需的类型...在malloc中,我们必须执行强制转换,但不是新的,尽管两者都返回一个void*指针.为什么?
考虑一下代码:
void foo(char a[]){
a++; // works fine, gets compiled
//...
}
Run Code Online (Sandbox Code Playgroud)
现在,考虑一下:
void foo(){
char a[50];
a++; // Compiler error
//...
}
Run Code Online (Sandbox Code Playgroud)
我听说一个数组相当于一个常量指针,不能递增,因为它不是一个左值...
那么为什么第一个代码被编译,是这样的,因为函数的数组参数作为指针传递,即T []被转换为T*以传递..所以,foo(a)传递一个作为指针.
但它是否再次转换为T [],因为声明为:
void foo(char a[]);
Run Code Online (Sandbox Code Playgroud) 我已经开始在stanford网站上学习编程方法(CS106A)课程.但我无法启动斯坦福卡雷尔.
我使用的是eclipse indigo classic 3.7.1和Windows 7 64位操作系统..
我写了以下代码:
import stanford.karel.*;
public class CollectNewspaperKarel extends SuperKarel {
// You fill in this part
public void run(){
move();
move();
}
}
Run Code Online (Sandbox Code Playgroud)
它给出了错误
Exception in thread "main" java.lang.NullPointerException
at acm.program.Program.main(Program.java:917)
at stanford.karel.Karel.main(Karel.java:202)
Run Code Online (Sandbox Code Playgroud)
我需要创建一个具有这样的公共接口的类Expr:
class Expr{
//...
public:
Expr(const char*);
int eval(); //Evaluates the expression and gives the result
void print();
};
Run Code Online (Sandbox Code Playgroud)
在设计中,如果用户输入无效字符串来构造Expr对象,如"123 ++ 233 + 23/45",那么最初构造Object并在对该对象调用eval()时通知错误是否正确.
或者应该在该点检查错误本身并抛出异常,但这会导致运行时严重增加.并且用户可以编写代码,并假设创建了Object,并且仅在运行时发现错误.
这样的问题总是在创建一个类时出现,是否有一种相当标准的方法来处理用户的这些错误?
如果数组大小只能是一个常数值
char d_name[...]
Run Code Online (Sandbox Code Playgroud)
意思?
实际上,在dirent.h文件中声明了一个struct dirent.其声明如下:
struct dirent{
....
ino_t d_ino;
char d_name[...];
...
};
Run Code Online (Sandbox Code Playgroud)
它用于一次读取一个目录内容,即inode编号和文件名等...
我的意思是这样一个数组的最大大小是多少,一旦定义了这样一个数组,在内存中静态分配多少空间?这样的定义是否可移植?
首先,我道歉,因为我不太了解正则表达式.
我使用正则表达式来匹配字符串.我在Python命令行界面中测试了它,但是当我在Java中运行它时,它产生了不同的结果.
Python执行:
re.search("[0-9]*[\\.[0-9]+]?[^0-9]*D\\([M|W]\\)\\s*US", "9.5 D(M) US");
Run Code Online (Sandbox Code Playgroud)
结果如下:
<_sre.SRE_Match object; span=(0, 11), match='9.5 D(M) US'>
Run Code Online (Sandbox Code Playgroud)
但是Java代码
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
class RegexTest {
private static final Pattern FALLBACK_MEN_SIZE_PATTERN = Pattern.compile("[0-9]*[\\.[0-9]+]?[^0-9]*D\\([M|W]\\)\\s*US");
public static void main(String[] args) {
String strTest = "9.5 D(M) US";
Matcher matcher = FALLBACK_MEN_SIZE_PATTERN.matcher(strTest);
if (matcher.find()) {
System.out.println(matcher.group(0));
}
}
}
Run Code Online (Sandbox Code Playgroud)
给出输出为:
5 D(M)美国
我不明白为什么它的行为方式不同.
以下声明是什么意思?
typedef int (&rifii) (int,int);
Run Code Online (Sandbox Code Playgroud)
它是对函数的引用吗?如果是,不应该初始化吗?
考虑一下代码:
#include <stdio.h>
#include <errno.h>
#include <sys/types.h>
#include <unistd.h>
/* main --- do the work */
int main(int argc, char **argv)
{
pid_t child;
if ((child = fork()) < 0) {
fprintf(stderr, "%s: fork of child failed: %s\n",
argv[0], strerror(errno));
exit(1);
} else if (child == 0) {
// do something in child
}
} else {
// do something in parent
}
}
Run Code Online (Sandbox Code Playgroud)
我的问题是子进程开始执行的代码在哪里,即首先执行哪一行?如果它执行整个代码,它也将创建自己的子进程,并且事情会继续发生,这肯定不会发生!
如果它在fork()命令之后启动,它是如何在if语句中进行的?
Stooge 排序是一种排序算法,描述如下:
Stooge-Sort(A,i,j)
if(A[i]>A[j]])
then exchange(A[i],A[j])
if i+1>=j
then return
k = [(j-i+1)/3]
Stooge-Sort(A,i,j-k)
Stooge-Sort(A,i+k,j)
Stooge-Sort(A,i,j-k)
Run Code Online (Sandbox Code Playgroud)
该算法的运行时间很糟糕,我知道这一点。
问题:我想知道这个算法是如何工作的?