zoukankan      html  css  js  c++  java
  • 15 int *ptr= (int *)(&a+1)跨了整个数组长度

    分析以下程序,输出结果 2,5

    #include<stdio.h>
    int main() {
        int a[5]={1,2,3,4,5};
        int *ptr=(int *)(&a+1);
        printf("%d,%d",*(a+1),*(ptr-1));
        return 0;
    }

    分析:

    a 代表的是int * 每次步长为一个int;

    &a 代表的是 int[]* 每次步长为所指向的数组的大小。(&a是数组指针,其类型是int(*)[5])

    ptr 指向的是数组a最后一个元素的下一个元素

    所以ptr-1指向的是数组a的最后一个元素

    *(a+1)指向的是数组a的第二个元素,等价于a[1]。

    补充:对数组名取地址,&a,得到的是整个数组的首地址,是与数组首元素的地址是相等的,但是意义不同。

    所以(a+1)是将地址值加4(一个int占4个字节大小),而&a+1是将地址值加20(数组大小为4字节*5个int类型的数字)。

    注意:int *p=(int *)&a+1; 与 int *ptr=(int *)(&a+1);是不同的。

    #include<stdio.h>
    int main() {
        int a[5]={1,2,3,4,5};
        int *ptr=(int *)(&a+1);
        printf("%d,%d",*(a+1),*(ptr-1));
        int *p=(int *)&a+1;
        printf("
    %d",*p);
        return 0;
    }
    拥抱明天! 不给自己做枷锁去限制自己。 别让时代的悲哀,成为你人生的悲哀。
  • 相关阅读:
    winsock编程WSAAsyncSelect模型
    winsock编程select模型
    socket编程,简单多线程服务端测试程序
    模板singleton模式的C++实现
    windows socket函数详解
    ACE_Message_Block消息数据类
    ACE Socket Wrapper Facade
    ACE_Event_Handler:事件响应入口
    ACE_Time_Value
    华为ICDcomm接口js测试
  • 原文地址:https://www.cnblogs.com/dd2hm/p/7269360.html
Copyright © 2011-2022 走看看