首页 > 其他分享 >不同类型的指针指向统一地址有什么区别

不同类型的指针指向统一地址有什么区别

时间:2023-03-11 15:13:05浏览次数:23  
标签:指向 int char 地址 printf sizeof 指针

首先先明确不同类型的指针有什么区别:

对于不同类型的指针:

  • 所占的内存空间大小是相同的,不会因为指向内容有差别。指针本质为一个地址,只与cpu、操作系统和编译器位数有关。
  • 区别在与指向地址空间不同,空间大小与指针类型有关。

 通过程序来检验冉类型的指针与指向空间的差别

#include <stdio.h>

int main(){
    int a[] = {0x11223344,0x55667788};
    int* q = a;
    char* p = (char*)a;
    printf("&a=%p\n",a);
    printf("sizeof(char*)=%ld,sizeof(int*)=%ld\n",sizeof(char*),sizeof(int*));    //查看不同类型指针内存大小
    printf("sizeof(char)=%ld,sizeof(int)=%ld\n",sizeof(char),sizeof(int));
    printf("int_p=%p,*int_p=0x%x\n",q,*q); 
    printf("char_p=%p,*char_p=0x%x\n",p,*p);                                      //查看不同类型指针指向的空间大小,以及空间内的值
    printf("int_p=%p,*int_p=0x%x\n",(q+1),*(q+1));
    printf("char_p=%p,*char_p=0x%x\n",(p+1),*(p+1));                              //对指针进行运算,查看区别return 0;
}

运行结果为:

&a=0x7ffe51241e00                             //数组a的首地址
sizeof(char*)=8,sizeof(int*)=8                //不同类型指针内存大小相同
sizeof(char)=1,sizeof(int)=4                  
int_p=0x7ffe51241e00,*int_p=0x11223344
char_p=0x7ffe51241e00,*char_p=0x44            //不同类型指针指向的内存地址大小不同
int_p=0x7ffe51241e04,*int_p=0x55667788
char_p=0x7ffe51241e01,*char_p=0x33            //地址运算改变的值不同

通过绘制地址与存储内容的关系, 能够比较直观的知道不同类型指向内容的差别。

疑惑:

与上面相同的程序,当对char型指针p进行运算为p+4时

printf("char_p=%p,*char_p=0x%x\n",(p+4),*(p+4));

得到结果

 不理解为何输出结果变为 0xffffff88。长时间的查找和尝试都没有理解原因,如果有知道的大佬,希望能说明一下,谢谢。

标签:指向,int,char,地址,printf,sizeof,指针
From: https://www.cnblogs.com/shi-zhai/p/17197635.html

相关文章

  • 修改docker的镜像地址
    Docker设置国内镜像地址-知乎(zhihu.com)C:\Users\clu\.docker\daemon.json Docker修改镜像源地址-星朝-博客园(cnblogs.com)从网上找了几个速度比较快的镜......
  • C多级指针与多维数组
    使用指针访问数组指针类型的加减运算可以使指针内保存的首地址移动。指针类型加n后。首地址向后移动n*步长字节。指针类型减n后。首地址向前移动n*步长字节。步......
  • 指针
                                                动态分配内存   ......
  • eNSP的使用4  NAT网络地址转换 easyip
    静态转换:一对一绑定 (双向通信)路由器靠地址区分内部主机easy ip :多对一  (单向通信)路由器靠端口(临时端口)区分内部主机easy ip的配置:1.配置aclacl  2000rule perm......
  • 04 文件的高级操作:控制文件指针的移动
    """@作者:egon老湿@微信:18611453110@专栏:https://zhuanlan.zhihu.com/c_1189883314197168128"""#指针移动的单位都是以bytes/字节为单位#只有一种情况特殊:#t......
  • 【LeetCode回溯算法#06】复原IP地址详解(练习如何处理边界条件,判断IP合法性)
    复原IP地址力扣题目链接(opensnewwindow)给定一个只包含数字的字符串,复原它并返回所有可能的IP地址格式。有效的IP地址正好由四个整数(每个整数位于0到255之......
  • 安卓混淆加固重签名工具1.7.8更新(附下载地址)
    安卓APK混淆加密重签名软件,可以对安卓APP进行混淆加固加密处理,对代码和资源文件进行混淆,进行重新签名等.  可以保护APK,增加逆向分析难度,防止误报毒等.  安卓混淆......
  • C++ 数组 指针小记
    voidfun(int*aa){return;}int*a=newint[16];memset(a,0,16);fun(a);voidfun(int*aa){return;}inta[16]={0};fun(a);  总之,两......
  • mongo副本集修改ip地址
    停服迁移仲裁节点剔除,正常关闭服务,关闭服务前,先关从节点,再关主节点1.登录主节点剔除仲裁节点useadmindb.auth("admin","admin1234")cfg=rs.conf();cfg.member[0].priority......
  • RAC修改IP地址
    关闭集群关闭数据库及监听srvctlstopdatabase-dzrzxdbsrvctlstoplistenersrvctlstopvip-nodezrzxdb1srvctlstopvip-nodezrzxdb2srvctlstopscan_listenersrv......