鱼C论坛

 找回密码
 立即注册
查看: 960|回复: 8

[已解决]指针和二维数组 的基本知识不理解

[复制链接]
发表于 2020-4-9 17:48:06 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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

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

我不清楚我理解的正不正确;望大佬们解答一下疑惑谢谢
最佳答案
2020-4-9 22:44:44
关于你这个问题
你要明白两个概念
数组的首地址 和 数组首元素的地址 是两个值看似相同而意义不同
吃透了这个,后面的问题就迎刃而解
arry是 数组首元素的地址
而&arry是  数组的首地址

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

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

*(*(array+1)+3) 表示第二行第四个元素吗,就是a[1][4]的值?
【回答】是a[1][3]的值
Snipaste_2020-04-09_15-50-41.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-4-9 18:52:48 | 显示全部楼层
arry 表示这个数组的首地址,也就是array[0][0]的地址吗?
不完全对,两者不完全相同

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

*(*(array+1)+3) 表示第二行第四个元素吗,就是a[1][4]的值?
是,但是是 a[1][3]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-9 19:45:43 From FishC Mobile | 显示全部楼层
那(array+1)呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-9 20:37:34 | 显示全部楼层
arry 表示这个数组的首地址,也就是array[0][0]的地址吗?


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

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

cout<<"地址:"<<*(a+1)<<"的值="<<**(a+1)<<endl;

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

cout<<"原地址"<< *(a+1)<<"的值=" << *(*(a+1) )<<" 向右偏移1: "<<*(*(a+1)+1)<<endl;

以上代码,你复制回去,一跑,看能否了解,如果可以,就请赏分吧?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-9 20:38:21 | 显示全部楼层
#include <cstdlib>
#include <iostream>
#include <stdio.h>
using namespace std;


    
                       
int main(int argc, char *argv[])
{
    int a[2][2]={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[0]<<endl;
    cout<<a[0][0]<<endl;
   
     
    system("PAUSE");
    return EXIT_SUCCESS;
}




        
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-9 20:48:03 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-9 22:44:44 | 显示全部楼层    本楼为最佳答案   
关于你这个问题
你要明白两个概念
数组的首地址 和 数组首元素的地址 是两个值看似相同而意义不同
吃透了这个,后面的问题就迎刃而解
arry是 数组首元素的地址
而&arry是  数组的首地址

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

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

*(*(array+1)+3) 表示第二行第四个元素吗,就是a[1][4]的值?
【回答】是a[1][3]的值
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-9 22:48:23 | 显示全部楼层
#include <iostream>  //1,
using namespace std; //2,最上面有这两行吗?若有,直接用下面的,粘到main中,一定可以运行的

int a[2][2]={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[0]<<endl;
    cout<<a[0][0]<<endl;
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-10 12:21:17 From FishC Mobile | 显示全部楼层
二维数组每个元素是一个地址值
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-15 06:49

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表