我有几个关于指针的问题。
我有以下结构
struct buffer {
char *ptr;
char data[DATA_SIZE];
};
我有以下代码
printk("ptrs and what not: buf=%p, b-ptr=%p, b-data=%p, INIT_LOC=%lu\n", buf, buf->ptr, buf->data, INIT_LOC);
if (buf)
buf->ptr = buf->data + INIT_LOC;
printk("ptrs and what not: buf=%p, b-ptr=%p, b-data=%p, INIT_LOC=%lu\n", buf, buf->ptr, buf->data, INIT_LOC);
输出如下:
ptrs and what not: buf=ffff880091ae2000, b-ptr= (null), b-data=ffff880091ae2008, INIT_LOC=10
ptrs and what not: buf=ffff880091ae2000, b-ptr=ffff880091ae2012, b-data=ffff880091ae2008, INIT_LOC=10
问题
1) 添加数字时,假设 2 到具有地址的 ptr 假设 10001 是值 10003,或 10001 + 2 * sizeof(X),其中 x 是 ptr 的类型。
2) 如果 ptr=10001 是内存中的字符数组,则该数组中的第一个字符在位置 10001,第二个字符是在位置 10002 还是 10009?或者会是什么?
3) 转到上面显示的打印输出 buf->data 的地址为 2008,我不确定如何将 10 添加到它使其指向 2012。
提前致谢。