数组名与数组第一个元素地址还有数组的地址的区别
1.这三个意义都是指什么?2.定义一个一维数组 array={1,2,3,4,5};
int (*P)=&array;
从数组指针的赋值是不是可以看出数组名array加上&就表示数组的地址呢?
那么数组名只是与数组首元素的地址在数值上相等,它的意义又是什么呢?
3.定义一个二位数组 temp;
视频里说二位数组的数组名temp可以理解为指向包含五个元素的数组的指针,把二维数组temp当成一个包含四个元素的一维数组,这四个元素每一个又可以当成是包含五个元素的一维数组,
那么temp是不是可以当成temp~temp的数组名呢?
数组名temp指向的是不是temp这一维度的数组还是指向这一维度数组的首元素temp? bszs 发表于 2021-9-27 21:19
图片上的代码和输出我全明白,我看了数组指针和指针与二维数组后一直迷糊数组名,数组指针赋值给指针的是 ...
数组名是数组第 0 个元素的地址
C语言中没有二维数组,没有三维数组,没有多维数组
C语言中的是 数组中存储数组,为了方便才称之为 二维数组,三维数组,四维数组,。。。
int a; // a 是一个数组,有 3 个元素,每一个元素的类型都是 int
char b // b 是一个数组,有 4 个元素,每一个元素的类型都是 一个数组
// 这个数组有 2 个元素,每一个元素的类型都是 char
是数组的数组
数组中存储的是数组
为了方便才称之为 二维数组,实际是 数组中存储数组
数组名是数组第 0 个元素的地址
a 就是 &a
b 就是 &b
b 就是 &b 这个地方挺迷糊的,主要还是不理解数组名与数组首元素还有数组的地址的区别 刚好,之前回答的两个问题,综合起来就是你这个问题的答案
https://fishc.com.cn/thread-203000-1-1.html
https://fishc.com.cn/thread-202679-1-1.html
https://xxx.ilovefishc.com/forum/202109/26/233652vei7ff787mppqg8f.png
第 2 个从 27 楼开始看
https://fishc.com.cn/thread-203000-1-1.html
#include <stdio.h>
int main(void) {
int array[] = {1, 2, 3};
int (*p)[] = &array;
printf("%p\n", p);
printf("%p\n", &array);
printf("%p\n", *p);
printf("%p\n", *&array);
printf("%p\n", array);
printf("%p\n", &array);
int (*a)[];
a = p;
a = &array;
printf("%p\n", a);
int *b;
b = *p;
b = *&array;
b = array;
b = &array;
printf("%p\n", b);
return 0;
}
地址的值一样,但是类型不同
#include <stdio.h>
int main() {
long long a = {
{123, 456, 789, -1},
{223, 556, 889, -2},
{323, 656, 989, -3},
{423, 756, 189, -4}
};
long long **x = (long long **)a;
long long (*y) = &a;
printf("%p\n", x);
printf("%p\n", y);
printf("%p\n", x);
printf("%p\n", (*y));
printf("%lld\n", (long long)x);
printf("%lld\n", (long long)(*y));
//printf("%lld\n", x); // 报错
printf("%lld\n", (*y));
return 0;
}
/*
$ ./main
0xffffcb90
0xffffcb90
0x7b
0xffffcb90
123
4294953872
123
$
*/ 人造人 发表于 2021-9-27 00:02
地址的值一样,但是类型不同
{:10_269:}c++看不懂~~~~
数组首元素地址和数组的地址好理解,但数组名是具体指啥啊?
把一个二维数组每行都当成一个一维数组来看,一行的第一个元素是否可以当成这个一维数组的数组名呢? 变量的类型决定了如何操作这个变量
bszs 发表于 2021-9-27 00:20
c++看不懂~~~~
数组首元素地址和数组的地址好理解,但数组名是具体指啥啊?
把一个二维数组 ...
第 2 个从 27 楼开始看
基本上没有使用多少 C++ 的东西
数组名就是数组第 0 个元素的地址
&a
把一个二维数组每行都当成一个一维数组来看,一行的第一个元素是否可以当成这个一维数组的数组名呢?
我认为是对的 人造人 发表于 2021-9-27 00:02
地址的值一样,但是类型不同
看到那个指针与二维数组的时候,二维数组array的数组名array当成了指向五个元素的数组的指针,就想着,这不是数组指针吗?数组指针赋值的是整个数组的地址,那么这个二维数组名array是不是也存放着第一行·的地址?或者把这一行当成包含五个元素的一维数组array,那就是array指针存放着整个数组array的地址? bszs 发表于 2021-9-27 00:29
看到那个指针与二维数组的时候,二维数组array的数组名array当成了指向五个元素的数组的指针,就想 ...
你先看一看我写的那些内容,还有前面两个帖子的内容
看看能理解多少 如图:
数组的访问和指针差不多,
int array{1,2,3,4,5}
int* p=array;
这就说明了array就是数组的指针,所以数组的访问方式是[指针+下标],下标就是偏移,距离是[类型*下标]
同样,反汇编里数组的访问方式也用到了ptr,
至于有什么意义,如果你不加下标,谁知道你是个数组?
二维数组,
图下面,也是一个道理,
int temp
指针就是temp,指向的位置是temp,
然后在吧temp当做一个指针,指向它的头部,也就是temp,打个括号可能会更容易理解 (temp)
第一个下标里面是元素的头部
第二个下标里面是元素的元素数量
所以下标1+1,偏移=(类型*下标2)
你甚至可以这样理解tmep就是一个p
int* p=temp;
p就是temp
p就是temp
p就是tmep
p就是temp
p就是temp
2736946915 发表于 2021-9-27 04:33
如图:
数组的访问和指针差不多,
int array{1,2,3,4,5}
也就是说二维数组数组名可以当成指针但是和数组指针不一样,数组指针指向的是整个数组,存放的是数组的地址,而二维数组存放的是数组每行首元素的地址 bszs 发表于 2021-9-27 16:37
也就是说二维数组数组名可以当成指针但是和数组指针不一样,数组指针指向的是整个数组,存放的是数组的地 ...
是的,你可以把它当成指针,但是后面说错了,数组指针和数组名指向的地址都是一样的,本质相同;
数组指针和数组名指向的都是它头部,也就是数组第一个元素 2736946915 发表于 2021-9-27 18:21
是的,你可以把它当成指针,但是后面说错了,数组指针和数组名指向的地址都是一样的,本质相同;
数组指 ...
但是数组指针那一节里说的是数组指针指向的是数组的地址,而数组的地址、数组名和数组首元素的地址值相同性质不同 人造人 发表于 2021-9-27 00:39
你先看一看我写的那些内容,还有前面两个帖子的内容
看看能理解多少
二维数组数组名可以当成指针但是和数组指针不一样,数组指针指向的是整个数组,存放的是数组的地址,而二维数组存放的是数组每行首元素的地址 人造人 发表于 2021-9-27 00:39
你先看一看我写的那些内容,还有前面两个帖子的内容
看看能理解多少
我这样理解还吗?两个大佬都教不会我,我吐了{:10_282:} bszs 发表于 2021-9-27 20:47
我这样理解还吗?两个大佬都教不会我,我吐了
我写了那么多(还有那个两个帖子的内容),你看懂了多少?
你目前哪里不明白?
bszs 发表于 2021-9-27 19:03
但是数组指针那一节里说的是数组指针指向的是数组的地址,而数组的地址、数组名和数组首元素的地址值相同 ...
这个就得看你是怎么理解的了,简单理解可以区分,因为怕刚开始学习,把数组和指针弄混淆,
区别就在于:
指针能单独使用,你现在指的这个数组,我不想指它了,我指向另一个数组,也可以
数组名不行,它必须得配合下标,它不能像指针一样想指哪里就指哪里,局限很大
页:
[1]
2