wht666 发表于 2020-4-9 17:48:06

指针和二维数组 的基本知识不理解

求大佬帮助
arry 表示这个数组的首地址,也就是array的地址吗?
*(array + 1) 表示第二行的首地址,还是第二行首元素呀,就是array的值?
*(*(array+1)+3) 表示第二行第四个元素吗,就是a的值?

还有就是(array+1)表示的是什么呀

我不清楚我理解的正不正确;望大佬们解答一下疑惑谢谢

BngThea 发表于 2020-4-9 18:52:48

arry 表示这个数组的首地址,也就是array的地址吗?
不完全对,两者不完全相同

*(array + 1) 表示第二行的首地址,还是第二行首元素呀,就是array的值?
地址

*(*(array+1)+3) 表示第二行第四个元素吗,就是a的值?
是,但是是 a

wht666 发表于 2020-4-9 19:45:43

那(array+1)呢

howzyao 发表于 2020-4-9 20:37:34

arry 表示这个数组的首地址,也就是array的地址吗?

我认为是这样的:
arry此时,是"数组头",也就是实际意认的指针,不信可以看代码:
int a={1,2,3,4};
cout << a <<endl;
cout<< a<<endl;
cout<<a<<endl;

*(array + 1) 表示第二行的首地址,还是第二行首元素呀,就是array的值?
cout<<"地址:"<<*(a+1)<<"的值="<<**(a+1)<<endl;

*(*(array+1)+3) 表示第二行第四个元素吗,就是a的值?
cout<<"原地址"<< *(a+1)<<"的值=" << *(*(a+1) )<<" 向右偏移1: "<<*(*(a+1)+1)<<endl;

以上代码,你复制回去,一跑,看能否了解,如果可以,就请赏分吧?{:10_257:}

howzyao 发表于 2020-4-9 20:38:21

#include <cstdlib>
#include <iostream>
#include <stdio.h>
using namespace std;


   
                     
int main(int argc, char *argv[])
{
    int a={1,2,3,4};
   
    cout<<"地址:"<<*(a+1)<<"的值="<<**(a+1)<<endl;
   
    cout<<"原地址"<< *(a+1)<<"的值=" << *(*(a+1) )<<" 向右偏移1: "<<*(*(a+1)+1)<<endl;
   
    cout << a <<endl;
    cout<< a<<endl;
    cout<<a<<endl;
   
   
    system("PAUSE");
    return EXIT_SUCCESS;
}




      

wht666 发表于 2020-4-9 20:48:03

howzyao 发表于 2020-4-9 20:38


运行不了

4goodworld 发表于 2020-4-9 22:44:44

关于你这个问题
你要明白两个概念
数组的首地址 和 数组首元素的地址 是两个值看似相同而意义不同
吃透了这个,后面的问题就迎刃而解
arry是 数组首元素的地址
而&arry是数组的首地址

arry 表示这个数组的首地址,也就是array的地址吗?
【回答】:arry 表示这个数组的首元素的地址,他们的值是一样的,但arry与&array 所代表的意思是不一样的,
我们推理下,一个int arr={1,2,3},你直接sizeof(arr),结果是多少?是4*3,那么 arr+1啥意思,是位移数组的一个单位长度(12哟)
你测试下 arry+1 和 &array +1就知道他们单位长度是不一样的,前者是sizeof(arry)个单位,后者是sizeof(arry)个单位

*(array + 1) 表示第二行的首地址,还是第二行首元素呀,就是array的值?
【回答】如果你明白array是数组首元素地址,而这个首元素也是一个一维数组,它也是array这个一维数组地址   array+1就相当于跨越了一个一维数组长度单位,取值*(array + 1) 是可以理解为取到了 array对应的值,但我觉得概念上也可以理解为array这个一维数组地址所对应的值

*(*(array+1)+3) 表示第二行第四个元素吗,就是a的值?
【回答】是a的值

howzyao 发表于 2020-4-9 22:48:23

#include <iostream>//1,
using namespace std; //2,最上面有这两行吗?若有,直接用下面的,粘到main中,一定可以运行的

int a={1,2,3,4};
   
    cout<<"地址:"<<*(a+1)<<"的值="<<**(a+1)<<endl;
   
    cout<<"原地址"<< *(a+1)<<"的值=" << *(*(a+1) )<<" 向右偏移1: "<<*(*(a+1)+1)<<endl;
   
    cout << a <<endl;
    cout<< a<<endl;
    cout<<a<<endl;

JohnEric 发表于 2020-4-10 12:21:17

二维数组每个元素是一个地址值
页: [1]
查看完整版本: 指针和二维数组 的基本知识不理解