C和指针

Posted alwayszzj

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C和指针相关的知识,希望对你有一定的参考价值。

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和指针的主要内容,如果未能解决你的问题,请参考以下文章

为啥在访问二级指针时出现分段错误错误? C语言

使用 std::thread 函数 C++11 将指针作为参数传递

片段中的 EditText 上的空指针异常 [重复]

活动到片段通信:当我尝试从活动更新片段中的文本视图时,出现空指针异常

空指针异常 - 片段活动

片段中的 Listview 适配器给出空指针异常