我在获取变量' arr'的内容方面遇到了问题。这是一个指针数组。
我尝试了p *arr@n
,但它提供了以下输出:$1 = {0x603010, 0x603030}
。
我该怎么办?
int n, q;
scanf("%d %d", &n, &q);
int lastAnswer=0, index_size[n], *arr[n]; // <-- here
for(int i=0; i<n; i++)
index_size[i] = 0;
for(int i=0; i<n; i++) {
int *temp = malloc(sizeof(int)*n);
arr[i] = temp;
}
while(q--) {
int w, x, y, seq;
scanf("%d %d %d", &w, &x, &y);
if(w == 1) {
seq = ((x ^ lastAnswer) % n);
arr[seq][index_size[seq]++] = y;
}
else {
seq = ((x ^ lastAnswer) % n);
lastAnswer = y%n;
printf("%d\n", lastAnswer);
}
}
return 0;
答案 0 :(得分:1)
如果您打印出一个指针本身,它只会在您的内存块中为您提供一个地址。
所以print *arr@n
只会给你第一个维度的内容(输出中的地址数组)
如果您想打印更深层次的内容。你可能想做这样的事情:
print **arr@n;
或
print *arr[0]@n
另一种方法是在程序中定义一个漂亮的打印函数,并在gdb中调用它。
void print(int arr[][], n, m)
{
int i, j;
for (i = 0; i < n; ++i)
{
for (j = 0; j < m; ++j)
printf("%d ", arr[i][j]);
printf("\n");
}
}
通过
在gdb中调用它call print(arr, n, m)
我不认为gdb支持打印2D阵列本身,为什么?
由于print *array@3
的定义不打印array
中的前三个元素,而是{&#34;引用*array
(或array[0]
)和array[0]
之后的三个元素。
print **arr@n@n
在这种情况下不起作用(虽然它打印出一个很好的格式)