我从“理解和使用C指针”(里斯)那本书中尝试了以下代码示例,该示例说明了如何将二维数组指针传递给函数:
void display2DArray(int arr[][5], int rows) {
for (int i = 0; i<rows; i++) {
for (int j = 0; j<5; j++) {
printf("%d", arr[i][j]);
}
printf("\n");
}
}
void main() {
int matrix[2][5] = {{1, 2, 3, 4, 5},{6, 7, 8, 9, 10}};
display2DArray(matrix, 2);
当我在执行过程中使用gdb
调试器检查arr变量时,我得到:
(gdb) p arr
$156 = (int (*)[5]) 0x7fffffffe1c0
(gdb) p &arr
$157 = (int (**)[5]) 0x7fffffffe198
(gdb) p *0x7fffffffe198
$158 = -7744
这个负数-7744
是什么?
我认为取消引用地址0x7fffffffe198
应该产生0x7fffffffe1c0
吗?
答案 0 :(得分:0)
这个负数-7744是什么?
它是FFFFFFFFFFFFE1C0的十进制转换。
我认为取消引用地址0x7fffffffe198应该会产生0x7fffffffe1c0吗?
是的,但是它将转换为十进制表示形式。
内存地址不是负数,但是可以用来表示内存位置的数据类型。