小编Ete*_*ght的帖子

如何将main的*argv []传递给函数?

我有一个程序可以接受命令行参数,我想从一个函数访问用户输入的参数.如何传递的*argv[],从int main( int argc, char *argv[])那个函数?我对指针的概念不熟悉,*argv[]看起来有点过于复杂,我无法自己解决这个问题.

我的想法是main通过将我想要对参数执行的所有工作移动到库文件来尽可能保持干净.当我设法把它们拿到外面时,我已经知道我要对这些论点做些什么main.我只是不知道如何让他们到那里.

我正在使用GCC.提前致谢.

c pointers command-line-arguments

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

如何在递归函数中编辑指向列表节点的指针?

直到现在,我一直在编写一个相当复杂的程序.无论如何,我应该编写一个操作结构列表的函数.我试图让这个问题尽可能简单,所以我写下了一段非常简单的代码供参考.

事情是这样的:首先我testf从另一个函数调用它,为它提供一个有效的current以及i一个值为0.这意味着testf在开始访问其余代码之前会调用自己约100次.这是所有生成的实例testf将开始得到解决的时候.

 void testf(listnode *current, int *i) {
   wordwagon *current2;

   current2 = current;
   if (*i < 100) {
     *i = *i + 1;
     current2 = current2->next;
     testf(current2, i);
   }


   current = current->next;
   return;
 }
Run Code Online (Sandbox Code Playgroud)

如果,假设我有足够的连接列表节点,current = current->next;那么"最后一个"testf函数访问和编辑调用者的current2值(这个函数是什么current)的正确方法,还是我可怕的错误?如果我是,从被调用函数内部更改调用函数的变量的方法是什么,并确保它们不会在被调用函数返回后立即消失?我发现很难掌握指针的工作原理.

我很可能遗漏了重要信息,或者我没有清楚地问我的问题.如果是这种情况请通知我,以便我可以根据您的需要进行编辑.

提前致谢.

c recursion pointers pass-by-reference

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

Java Base b = new Derived(); 继承问题

使用以下命令创建新实例时会发生什么:

Base b = new Derived();
Run Code Online (Sandbox Code Playgroud)

我无法理解这背后的机制.

java inheritance

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

无法使用wchar.h比较UTF-8字符

我正在制作一个小程序来读取一个包含UTF-8元素的文件,char由char填充.读取char后,它会将其与其他一些字符进行比较,如果匹配,则用下划线'_'替换文件中的字符.

(好吧,它实际上复制了该文件,并用下划线替换了特定的字母.)

我不确定我到底在哪里弄乱,但最有可能到处都是.

这是我的代码:

   FILE *fpi;
   FILE *fpo;
   char ifilename[FILENAME_MAX];
   char ofilename[FILENAME_MAX];
   wint_t sample;


   fpi = fopen(ifilename, "rb");
   fpo = fopen(ofilename, "wb");

   while (!feof(fpi)) {
     fread(&sample, sizeof(wchar_t*), 1, fpi);

     if ((wcscmp(L"?", &sample) == 0) || (wcscmp(L"?", &sample) == 0)  ) {
   fwrite(L"_", sizeof(wchar_t*), 1, fpo);

     } else {
       fwrite(&sample, sizeof(wchar_t*), 1, fpo);

     }
   } 
Run Code Online (Sandbox Code Playgroud)

我省略了与文件名生成有关的代码,因为它没有提供给案例.这只是字符串操作.

如果我为这个程序提供一个文件,其中包含???? ??? ?????.我希望它返回的单词: ???_ ??? ????_.

搜索互联网没有多大帮助,因为大多数结果非常笼统或谈论有关UTF-8的完全不同的事情.这就像没有人因某种原因需要操纵单个字符.

任何指向我正确方向的东西都是最受欢迎的.我不一定在寻找我提交的代码的直接修复版本,我将非常感谢任何有见识的评论,帮助我理解wchar机制的确切运作方式.整个wbyte,wchar,L,no-L,对我来说是个烂摊子.

预先感谢您的帮助.

c utf-8 widechar

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

"这个"指向哪里?

我知道下面的代码片段远非完美,但它可以完成我想要它做的事情.我的问题是,我无法理解指向的"this"关键字是什么对象.

public class Browser extends JFileChooser{

  public File browser_creation(){

    int r;

    JFileChooser browser1 = new JFileChooser();        
    r = browser1.showOpenDialog(this);


    if (r == Browser.APPROVE_OPTION) {
        return browser1.getSelectedFile();
    }
    else {
        return null;
    }
  }  
}
Run Code Online (Sandbox Code Playgroud)

java this

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

我怎么知道我是否成功地释放了整个单链表?

我创建了一个指针数组.我已将其中一些用作单链表的根.的大小lgroup(指针数组)是10j可以得到高达10为好.我lptr喜欢这样的每一个:

lgroup[i].lptr[j] = (node *) malloc (sizeof(node));
Run Code Online (Sandbox Code Playgroud)

如果我不打算使用它我会设置curr = lgroup[i].jptr[j];curr->next = NULL;.否则我只是开始使用malloc每一个curr->next然后我做curr = curr->next;.当我不想在列表中添加任何更多节点时,我只是放入curr->next = NULL;并继续下一个节点lptr.很标准的东西.

在我的程序结束时,我想要free我为我的列表声明的所有内存.这是我尝试这样做的方式:

for (i = 0; i < 10; i++) {
  for (j = 0; j < 10; j++) {
    if (lgroup[i].lptr[j] == NULL) {
      free(lgroup[i].lptr[j]);
      continue;
    } else {
      curr = lgroup[i].lptr[j];
      while(curr->next != NULL) {
        curr2 = …
Run Code Online (Sandbox Code Playgroud)

c malloc free list

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

界面内可修改的常量

我知道基于Java教程:

除了方法声明之外,接口还可以包含常量声明.接口中定义的所有常量值都是隐式public,static和final.再一次,可以省略这些修饰符.

是否可以使接口内的值由实现所述接口的所有类共享和修改?

java interface constants

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

如何判断一个文法是否是LR(n)、LL(n)

对于一种不是LL(1)or 的语言LR(1),如何尝试找出某个数字是否n存在使得语法可以是LL(n)or LR(n)

LR(0)您可以通过查看规范的项目集合来检查语法是否正确LR(0)。然后,假设不是,您可以通过引入先行符号来LR(0)检查它是否是。LR(1)我的简单推理告诉我,要检查它是否LR(2)存在,您可能必须使前瞻包含接下来的两个符号,而不仅仅是一个。因为LR(3)你必须考虑三个符号等。

即使是这种情况,尽管我对此表示怀疑,但我正在努力思考如何尝试识别(甚至暗示)一种n特定的语法,或者它的不存在,LR(n)并且/或LL(n)不从任意LR(m)向上增量检查。

grammar parsing ll-grammar lr-grammar

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

表达式的执行优先级

在以下代码行中:

x = x.times(x).plus(y);
Run Code Online (Sandbox Code Playgroud)

这些表达式将按什么顺序执行?

会是这样的:

x = (x + y)*x
Run Code Online (Sandbox Code Playgroud)

x = (x^2) + y,或其他什么,为什么?

有关特定主题的文档链接将受到高度赞赏,因为我的搜索没有运气.显然我不知道在哪里寻找和寻找什么.

谢谢.

java

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