async function deleteRows() {
try {
await Excel.run(async (context) => {
const expensesTable = context.workbook.tables.getItem("ExpensesTable")
const bodyRows = expensesTable.getDataBodyRange().load("rowCount");
await context.sync();
if (bodyRows.rowCount == 7) {
const lastThreeRows = bodyRows.getOffsetRange(4, 0).getResizedRange(-4, 0);
lastThreeRows.delete(null);
await context.sync();
}
});
}
catch (error) {
OfficeHelpers.UI.notify(error);
OfficeHelpers.Utilities.log(error);
}
}
我期待着' 4'打印,但我得到了一个记忆位置。
答案 0 :(得分:4)
您可以像使用一元*
运算符一样取消引用它。
但是你必须注意operator precedence将在这里起作用,因为数组下标运算符的优先级高于取消引用运算符。因此你必须这样做。
(*s.p)[x][y]
此外,您使用错误的格式来打印整数。 "%p"
格式是打印实际指针,而不是整数。使用"%d"
。
作为替代方案,请记住,数组会自然地衰减指向其第一个元素的指针。这意味着对于您的数组aa
,使用它就会衰减为&aa[0]
,类型为int (*)[2]
。这意味着你可以使你的变量成为相同的类型,并在初始化中使用普通aa
,并像普通的“2d”数组一样使用它:
typedef struct
{
int (*p)[2];
} S;
int main()
{
int aa[2][2] = {{1, 2}, {3, 4}};
S s = { .p = aa }; // Note: Not using the address-of operator here
printf("Four: %d\n", s.p[1][1]); // Using array-indexing works as expected here
return 0;
}
答案 1 :(得分:1)
p
是int (*p)[2][2];
中的指向数组的指针,当您尝试打印时,它不是2D array
。
替换
printf("Four: %p\n", s.p[1][1]);/** %p is format specifier to prints the address, Instead use %d to print value **/
与
printf("Four: %d\n", (*s.p)[1][1]);
答案 2 :(得分:0)
是包含指向二维数组的指针的结构。因此,使用“s.p”,您将获得指向二维数组的指针。考虑到:
(*(s.p))[1][1]
将为您完成工作。
我猜你不打算使用%p占位符,因为它用于打印地址。