指针在C中的价值

pad*_*ony 9 c pointers memory-address

我已经开始学习C(所以,你知道..指针).

我有这个代码:

#include <stdio.h>
#include <string.h>

int main (int argc, char* argv[])
{
    char c = 'c';
    char* cptr = &c;

    printf("c = %c\n", c);
    printf("*cptr = %c\n", *cptr);  
    printf("c address = %p\n", &c);  
}
Run Code Online (Sandbox Code Playgroud)

我的输出是:

c = c
*cptr = c
c address = 0x7fff0217096f
Run Code Online (Sandbox Code Playgroud)

当我将上面的十六进制转换为十进制时,我得到:140720994002157

我的问题:

1)这个十进制值是否代表内存地址?不是太大了吗?

2)如何将指针的值(表示c变量的地址)打印为小数?

das*_*ght 9

不是[地址]太大了吗?

这是一个虚拟地址,这意味着它的数值不一定代表物理内存中字节的顺序号.此外,不同的进程可以在同一虚拟地址处保持不同的数据,因为每个数据都有其各自的地址空间.

如何以整数格式打印指针的值?

用于uintptr_t将指针表示为整数值,然后使用PRIuPTR宏进行打印:

#include <stdio.h>
#include <inttypes.h>

int main(void) {
    char c = 'x';
    char *p = &c;
    uintptr_t x = (uintptr_t)p;
    printf("Pointer as decimal: %"PRIuPTR"\n", x);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

演示.

  • @padawanTony你不能,从用户无法访问的虚拟内存映射到物理内存. (2认同)