码迷,mamicode.com
首页 > 其他好文 > 详细

C和指针

时间:2020-03-13 01:00:32      阅读:61      评论:0      收藏:0      [点我收藏+]

标签:mes   需要   pac   为什么   类型转换   name   asi   个数   stream   

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和指针

标签:mes   需要   pac   为什么   类型转换   name   asi   个数   stream   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!