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变量的地址)打印为小数?
不是[地址]太大了吗?
这是一个虚拟地址,这意味着它的数值不一定代表物理内存中字节的顺序号.此外,不同的进程可以在同一虚拟地址处保持不同的数据,因为每个数据都有其各自的地址空间.
如何以整数格式打印指针的值?
用于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)
| 归档时间: |
|
| 查看次数: |
4363 次 |
| 最近记录: |