我正在尝试使用指向数组的指针。我无法获得以下代码。看起来很小的问题,但找不到它。
其次,有人说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中理解指向数组的指针的概念。以下是教科书中的代码段。我试过只有一排。
答案 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];
如果在数组定义中使用*符号,则应使用动态分配或静态变量地址来设置指针并使用它。