小编bhu*_*hni的帖子

类型int**和int [] []之间有什么区别?

如果以下分配有效:

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*

c++

19
推荐指数
2
解决办法
1624
查看次数

为什么new不需要对指针进行强制转换,即使malloc需要它?

<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*指针.为什么?

c++ malloc new-operator

11
推荐指数
2
解决办法
357
查看次数

是否将数组参数传递给函数而不是常量指针?

考虑一下代码:

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)

c c++ arrays pointers

7
推荐指数
2
解决办法
1057
查看次数

斯坦福大学的卡雷尔机器人抛出了NullPointerException

我已经开始在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)

我按照这里给出的一些说明,但随后输出了一个空白屏幕.

斯坦福的任务1可以在这里找到,斯坦福的机器人卡雷尔可以在这里找到

java karel

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

如何处理传递给构造函数的语法有效但逻辑无效的参数?

我需要创建一个具有这样的公共接口的类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,并且仅在运行时发现错误.

这样的问题总是在创建一个类时出现,是否有一种相当标准的方法来处理用户的这些错误?

c++ error-handling class

5
推荐指数
2
解决办法
476
查看次数

如果数组大小只能是一个常数值而不是char d_name [...]的含义?

如果数组大小只能是一个常数值

   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编号和文件名等...

我的意思是这样一个数组的最大大小是多少,一旦定义了这样一个数组,在内存中静态分配多少空间?这样的定义是否可移植?

c linux arrays

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

Python和Java中相同正则表达式的不同行为

首先,我道歉,因为我不太了解正则表达式.

我使用正则表达式来匹配字符串.我在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)美国

我不明白为什么它的行为方式不同.

python java regex

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

它是对函数的引用还是什么?

以下声明是什么意思?

typedef int (&rifii) (int,int);
Run Code Online (Sandbox Code Playgroud)

它是对函数的引用吗?如果是,不应该初始化吗?

c++

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

代码执行在子进程中从何处开始?

考虑一下代码:

#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语句中进行的?

c linux fork process

3
推荐指数
2
解决办法
1659
查看次数

走狗排序是如何工作的?

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)

该算法的运行时间很糟糕,我知道这一点。
问题:我想知道这个算法是如何工作的?

arrays sorting algorithm

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

标签 统计

c++ ×5

arrays ×3

c ×3

java ×2

linux ×2

algorithm ×1

class ×1

error-handling ×1

fork ×1

karel ×1

malloc ×1

new-operator ×1

pointers ×1

process ×1

python ×1

regex ×1

sorting ×1