首页 > 其他 > 详细

C和指针

时间:2020-03-13 00:42:08      阅读:74      评论:0      收藏:0      [点我收藏+]

1.虽然&a和a的地址是同一个地址,但是(&a+1)并不是将指向数组首元素的地址加1,让其指向第二个元素,而是将整个数组加1。&a+1在这就相当于a+sizeof(int)*10,而a+1相当于a+sizeof(int)*5。

2.(int*)是强制类型转换,这里为什么需要强制类型转换,因为类型不匹配, &a是int(*)[5];ptr是 int *类型。

3.*(ptr-1) 又是ptr-sizeof(int)*1 就是原来ptr指向10下一个位置 减一后指向10 *(ptr-2)指向9。

#include<iostream>
using namespace std;

int main()
{
    int a[2][5]={{1,2,3,4,5},{6,7,8,9,10}};
    int *ptr=(int*)(&a+1);
    cout<<*(ptr-2)<<endl;   
    
    
    cout<<a<<endl;//数组头指针 第0行 
    cout<<a+1<<endl; // 第1行 20 
    cout<<(&a+1)<<endl;// 第2行 40 
    cout<<ptr<<endl; 
    cout<<ptr-1<<endl; 
    cout<<ptr-2<<endl; 
    cout<<*(ptr-1)<<endl;
    
    return 0;
 } 

结果

9
0x70fdf0
0x70fe04
0x70fe18
0x70fe18
0x70fe14
0x70fe10
10

C和指针

原文:https://www.cnblogs.com/alwayszzj/p/12483869.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!