关于数组和指针的一些理解

    xiaoxiao2024-12-03  2

    int a = 3; int * b = &a; cout<<"b = "<<b<<endl; cout<<"b+1 = "<<b+1<<endl;

    b 是指向int类型a的一个指针。第一行输出打印出b指向数据的地址。第二行输出打印第一行输出的地址再加上4个字节。原因是:指针的加减操作,例如加一,则会在原来指向的数据地址基础上,加上所指数据所占的字节数,在例子中,所指的数据指的是int 类型,占4个字节,所以在原基础上增加4个字节。

    了解了上述原理后,我们来看看下面这种情况。数组创建的方式有两种。第一种:

    int * arr = new int[2] = {1,2}; cout<<"arr : "<<arr<<endl; cout<<"arr+1:"<<arr+1<<endl; arr是一个int类型的指针,指向了一个数组第一个元素的地址。由于arr是一个int类型的指针,因此arr+1的时候,在arr地址基础上加上4个字节,即可得到arr+1的值

    第二种情况:

    int arr[] = {1,2,3}; cout<<"arr : "<<arr<<endl; cout<<"&arr : "<<&arr<<endl; cout<<"arr+1 : "<<arr+1<<endl; cout<<"&arr+1 : "<<&arr+1<<endl;

    第一个输出,接受参数是一个数组,隐式转换成数组首地址。第二个输出&arr,这得到的是一个数组指针,类型为int (*)[3]。 第三个输出,按照上面的规则,arr转换成指向第一个元素地址的指针,也就是一个int指针,所以arr+1是在arr基础上加上了4个字节,指向数组第二个元素。 第四个输出。由于&arr是一个int (*)[3]类型的指针,所以&arr+1应该要在&arr的基础上加上一个个数为3个的int数组的长度。即 3*4 = 12 个字节。

    转载请注明原文地址: https://ju.6miu.com/read-1294217.html
    最新回复(0)