无法获取指向数组的指针 - 应用程序崩溃

时间:2016-04-11 16:46:39

标签: c pointers

我正在尝试使用指向数组的指针。我无法获得以下代码。看起来很小的问题,但找不到它。

其次,有人说final PopupPanel jal2 = new PopupPanel(); jal2.show(); organizeFolders.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { Window.alert("Red Button clicked!"); } }) ; organizeIntoFolders.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { Window.alert("Red Button clicked!"); } }) ; organizeFiles.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { Button filesNames= new Button("Files according to names"); Button fileTypes = new Button("Files according to their file types"); Button fileAuthors = new Button("Files according to their authors"); Button fileAlbums = new Button("Files according to their albums"); filesNames.setStyleName("filesNames"); filesNames.setSize("0.5px", "0.5px"); fileTypes.setStyleName("fileTypes"); fileTypes.setWidth("5px"); fileTypes.setHeight("5px"); fileAuthors.setStyleName("fileAuthors"); fileAuthors.setWidth("5px"); fileAuthors.setHeight("5px"); fileAlbums.setStyleName("fileAlbums"); fileAlbums.setWidth("5px"); fileAlbums.setHeight("5px"); jal2.addStyleName("popup"); jal2.setSize("400px", "400px"); jal2.add(filesNames.asWidget()); jal2.add(fileTypes.asWidget()); jal2.add(fileAuthors.asWidget()); jal2.center(); jal2.show(); jal2.setVisible(true); jal2.add(fileAlbums.asWidget()); } }) ; 相当于int[4] *ptrToArray;这是正确的吗?但在我的案例中并没有编译。

int (* ptrToArray)[4];

编辑:  我试图通过Yeshwant Kanetkar在教科书Let Us C中理解指向数组的指针的概念。以下是教科书中的代码段。我试过只有一排。 enter image description here

3 个答案:

答案 0 :(得分:2)

更常见的是使用指向数组第一个元素的指针,如下所示:

    int *ptrToArray;

    ptrToArray = simple_array; // decays to &simple_array[0]

然后你可以通过指针访问原始数组的元素,如下所示:

    ptrToArray[colNum] = colNum;

可以像你一样指向数组本身:

    int (*ptrToArray)[NUM_COLS];

    ptrToArray = &simple_array;

但是,由于运算符优先级和关联错误,访问数组元素的代码不正确。索引运算符[]的优先级高于解除引用运算符*,因此您的代码应如下所示:

    (*ptrToArray)[colNum] = colNum;

(*ptrToArray)取消引用指向类型int [NUM_COLS]的值的指针。这将衰减到指针(int *)到数组的第一个元素,[numCols]将对指针执行数组索引操作。在此,应注意表达式((a)[i])等同于(*((a) + (i)))

答案 1 :(得分:0)

int arr[4]; //array of int

int *arr[4]; //array of int*. This is similar to int* arr[4];

在第一种情况下,数组中的每个元素都是int。示例:arr[0]包含值1

在第二种情况下,数组中的每个元素都是pointer-to-int。示例:arr[0]包含值FF0EBX0C

回到第一个案例int arr[4]。 “指向一个数组的指针”(你要问的)实际上只是arr本身没有[]。实际上,它实际上只是数组第一个元素的地址。

如果你这样做:

printf("address of arr: %p\n", arr);
printf("address of first element of arr: %p\n", &(arr[0]));

您会看到它们具有相同的值。

答案 2 :(得分:0)

对于一维和二维阵列,使用这些线:
    int array [ARRAY_LEN];     int array_2dims [RAW_ARRAY_LEN] [COL_ARRAY_LEN]; 如果在数组定义中使用*符号,则应使用动态分配或静态变量地址来设置指针并使用它。