标签: dereference

如何在perl中打印哈希?

如何打印$ stopwords?它似乎是一个字符串($)但是当我打印它时,我得到:"HASH(0x8B694)",每次运行时内存地址都会改变.

我正在使用Lingua :: StopWords,我只想打印它正在使用的停用词,所以我肯定知道那里有什么停用词.我想打印这两个文件.

我是否需要尊重$ stopwords?

这是代码:

use Lingua::StopWords qw( getStopWords );

open(TEST, ">results_stopwords.txt") or die("Unable to open requested file.");
my $stopwords = getStopWords('en');

print $stopwords;
Run Code Online (Sandbox Code Playgroud)

我试过了:

my @temp = $stopwords;
print "@temp";
Run Code Online (Sandbox Code Playgroud)

但这不起作用.救命!

最后一点:我知道有一个关于Lingua :: StopWords的停用词列表,但我正在使用(en),我只是想绝对确定我正在使用的停止词,所以这就是为什么我要打印它理想情况下,我想将它打印到文件部分,我应该已经知道该怎么做.

string perl hash dereference

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

使用 .toUpperCase() 编译代码时出现“char 无法取消引用错误”;

我是java新手,正在编写一个程序,可以让您输入您的名字和姓氏,并给出您的姓名缩写,但我希望缩写始终为大写。

每当我运行代码时,都会收到“字符无法取消引用”错误。

    import java.util.*;

    public class InitialHere
    {
        public static void main (String[] args)
        {
            Scanner getInput = new Scanner (System.in);
            String firstName;
            String lastName;
            char firstInitial;
            char lastInitial;

            System.out.println("What is your first name?");
            System.out.println();
            firstName = getInput.nextLine();
            System.out.println();
            System.out.println("Thankyou, what is your last name?");
            System.out.println();
            lastName = getInput.nextLine();

            firstInitial = firstName.charAt(0);
            lastInitial = lastName.charAt(0);
            firstInitial = firstInitial.toUpperCase();
            lastInitial = lastInitial.toUpperCase();

            System.out.println();
            System.out.println("Your initials are " + firstInitial + "" + lastInitial + ".");

        }
    }
Run Code Online (Sandbox Code Playgroud)

java char dereference

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

' - >'的无效类型参数(有'int')

我编译代码时收到下面报告的错误.你能错误地纠正我吗?

无效的类型参数->(有int)

我的代码如下:

#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>

typedef struct bundles
    {
    char str[12];
    struct bundles *right;
}bundle;

int main() {

    /* Enter your code here. Read input from STDIN. Print output to STDOUT */    
    unsigned long N;
    scanf("%lu", &N);
    bundle *arr_nodes;
    arr_nodes = malloc(sizeof(bundle)*100);
    int i=5;
    for(i=0;i<100;i++)
    {
    scanf("%s", &arr_nodes+i->str);
    printf("%s", arr_nodes+i->str);
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我在这些方面面临问题:

scanf("%s", &arr_nodes+i->str);
printf("%s", arr_nodes+i->str);
Run Code Online (Sandbox Code Playgroud)

c pointers operator-precedence invalid-argument dereference

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

我该如何在心理上解析这个陈述?

我遇到了以下声明,并且头脑冷静.

++(*q)->len;
Run Code Online (Sandbox Code Playgroud)

q似乎是一个连续的内存数组,从它的外观来看,似乎是一个指针数组structs; 掌握一个新的代码库,抱歉模糊不清.

使用上面的语句我们解引用q,获取指针的值,然后我们取消引用并访问该字段len,然后我们递增?在代码中,我想说的是,这++((*q)->len)将是显式执行.

或者我应该读这个,我们取消引用q然后递增值,然后我们取消引用并获得len字段,struct即q在增量之前的那个.再次,在代码中,我想说的是,这(++(*q))->len将是显式执行.

任何指导都会很棒

更新:我想第一个解析是有道理的++((*q)->len),就好像它是第二种情况,我们会得到它的价值,len然后不做任何事情.

c pointers dereference

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

c ++ *&amp;和空验证

假设我有以下功能:

void destroy(Song* song) {
    if (song)
        delete song;
}
Run Code Online (Sandbox Code Playgroud)

是否可以将实现更改为以下内容,以删除空验证?

void destroy(Song*& song) {
    delete song;
}
Run Code Online (Sandbox Code Playgroud)

如果是,为什么?

c++ pointers reference dereference

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

取消引用指向数组的 NULL 指针在 C 中是否有效?

这种行为是否已定义?

volatile long (*volatile ptr)[1] = (void*)NULL;
volatile long v = (long) *ptr;

printf("%ld\n", v);
Run Code Online (Sandbox Code Playgroud)

它起作用是因为通过取消对数组的指针的引用,我们正在接收一个数组本身,然后该数组衰减为指向它的第一个元素的指针。

更新演示:https : //ideone.com/DqFF6T

此外,GCC 甚至将下一个代码视为常量表达式:

volatile long (*ptr2)[1] = (void*)NULL;
enum { this_is_constant_in_gcc = ((void*)ptr2 == (void*)*ptr2) };
printf("%d\n", this_is_constant_in_gcc);
Run Code Online (Sandbox Code Playgroud)

基本上,在编译时取消引用 ptr2;

c arrays null pointers dereference

0
推荐指数
2
解决办法
418
查看次数

为什么指向 int 的指针用“*int”而不是“&amp;int”初始化?

例如,当初始化一个指向 int 的指针时,我们使用:

var pointer *int
Run Code Online (Sandbox Code Playgroud)

为什么语法不是:

var pointer &int
Run Code Online (Sandbox Code Playgroud)

对我来说,第二个版本更有意义,因为它读起来像“变量‘指针’是一个整数的内存地址”

或者换句话说,我发现“*”既用于定义内存地址类型(如上所述)又用于取消引用,例如 *pointer = 123

这是否像看起来那样令人困惑,还是我在这里遗漏了什么?

pointers reference go memory-address dereference

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

一维/二维数组指针的底层类型是什么,为什么需要双重解引用?

假设我这样初始化数组和变量:

int arr1d[3] = { 1, 2, 3 };
int* arrptr = arr1d;
int (*ptr1d)[3] = &arr1d;

int arr2d[2][3] = { {1, 2, 3}, {4, 5, 6} };
int (*ptr2d)[3] = arr2d;
Run Code Online (Sandbox Code Playgroud)

所以,arr1d是一个由 3 个整数组成的数组。在底层,arr1d是一个指向数组第一个元素的指针,即&arr1d[0]. 因此,我们可以赋值arr1d给int* arrptr。

ptr1d指向一个由 3 个整数组成的数组。arr1d是int*指向&arr1d[0],但为什么是&arr1d类型int (*)[3]?天真地,我认为写作&arr1d只是给了我们一个地址来分配给指针。这是特定于指向数组的指针吗?

显然,arr2d是类型int (*)[3](我从这篇文章中学到的)。双方ptr2d并*ptr2d具有相同的值,所以这是为什么第二解引用甚至是必要的?我的想法是,这可能是因为ptr2d类型是int (*)[3] …

c++ pointers multidimensional-array memory-address dereference

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

如果在释放内存之前将指针设置为 NULL 会发生什么?

从安全的角度来看,在释放内存后将指针设置为 NULL 是一种很好的做法。如果在释放内存之前将指针设置为 NULL 会发生什么?这将如何导致漏洞?

c pointers nullpointerexception nullreferenceexception dereference

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

表达式 *++ptr 与 ++*ptr 有何不同?

有人可以解释为什么在输出中3 4 4打印而不是打印吗4 4 4?

#include <stdio.h>

int main(){

    int a[] ={0,1,2,3,4};
    int *p[] = {a,a+1,a+2,a+3,a+4};
    int **ptr= p; 

    ptr++;
    printf("%d %d %d\n",ptr-p,*ptr-a,**ptr);
    *ptr++;
    printf("%d %d %d\n",ptr-p,*ptr-a,**ptr);
    *++ptr;
    printf("%d %d %d\n",ptr-p,*ptr-a,**ptr);
    ++*ptr;
    printf("%d %d %d\n",ptr-p,*ptr-a,**ptr);

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

输出

c pointers increment pointer-arithmetic dereference

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