指针与二维数组学习中的一个疑惑
int array []={1,2,3,4,5,6,7,8,9}0 1 2
01 2 3
1 4 5 6
27 8 9
array + 1 和 *(array+1)一样吗?
它们都表示二维数组第二行第一个元素的地址。 不一样,数组的名字是数组第0个元素的地址
array 就是 &array
array + 1 就是 &array + 1
*(array + 1) 就是 *(&array + 1)
请问 &array + 1 和 *(&array + 1) 一样吗?
很明显不一样么
第2个在第1个的基础上又进行了1次解引用
人造人 发表于 2022-9-9 18:08
很明显不一样么
第2个在第1个的基础上又进行了1次解引用
但是第二个在二维数组里也表示第二行第一个元素的首地址呀
二维数组里*(*(array + 1) + 1) 表示第二行第二列元素
而加粗部分表示的是第二行首元素的地址 水边的小姑娘 发表于 2022-9-9 18:11
但是第二个在二维数组里也表示第二行第一个元素的首地址呀
二维数组里*(*(array + 1) + 1) 表示第二行第 ...
什么?
*(&array + 1)
&array 是数组第0个元素的地址
&array + 1 就是数组第1个元素的地址
*(&array + 1) 就是数组第1个元素 稍等,上面的不对,我在给你重写
int array []={1,2,3,4,5,6,7,8,9};
C语言中不存在所谓的二维数组,三维数组,四维数组,。。。
C语言中只有数组中的数组,就是在数组中存储数组
int array ={1,2,3,4,5,6,7,8,9};
array是一个数组,有3个元素,每一个元素都是一个数组
array是一个数组,array 也是一个数组
同样 array 和 array 也是数组
array 这个数组有3个元素,每一个元素都是一个int
array 的元素是 {1, 2, 3}
array 的元素是 {4, 5, 6}
array 的元素是 {7, 8, 9}
其实这个
int array ={1,2,3,4,5,6,7,8,9};
写成下面这样更好,更能体现数组中的数组
int array = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
array 是数组第0个元素的地址
&array 是数组的地址
array + 1 就是 &array + 1
array 是一个数组,&array就是 array 这个数组的地址
&array + 1 就成了 数组 array 的地址,就是 &array
*(array + 1) 就是 *&array
*&array 也就是 array
array 是一个数组,元素是 {4, 5, 6}
array 是一个数组,就可以理解成数组的名字
array 就是 &array
数组的名字是数组第0个元素的地址
数组名== &数组名
array == 数组名
& array
就是把数组名字的前面加上一个 &
后面加上一个
&array
就是 array 这个数组第0个元素的地址
写了这么多,不知道你能不能看懂
其实很简单,你就把多维数组看成是在数组里面存储数组
array 是一个数组
array 也是一个数组,是array这个数组第0个元素
array 是数组的名字
因为array这个数组的第0个元素是一个数组,array 也是数组的名字
数组的地址和数组第0个元素的地址是不一样的
#include <stdio.h>
int main() {
int array = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
printf("%p\n", array + 1);
printf("%p\n", *(array + 1));
printf("%p\n", (array + 1) + 1);
printf("%p\n", (*(array + 1)) + 1);
return 0;
}
人造人 发表于 2022-9-9 19:07
数组的地址和数组第0个元素的地址是不一样的
谢谢,谢谢抱歉这么晚回,还在上课,等会回去了我运行一下试试。{:10_254:} 人造人 发表于 2022-9-9 19:04
C语言中不存在所谓的二维数组,三维数组,四维数组,。。。
C语言中只有数组中的数组,就是在数组中存储 ...
我能理解它们是不一样的了,但是它们能达到相同的效果? 水边的小姑娘 发表于 2022-9-9 19:51
我能理解它们是不一样的了,但是它们能达到相同的效果?
#include <stdio.h>
int main() {
int array = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
printf("%p\n", array + 1);
printf("%p\n", *(array + 1));
printf("%p\n", (array + 1) + 1);
printf("%p\n", (*(array + 1)) + 1);
return 0;
}
人造人 发表于 2022-9-9 20:01
嗯嗯,它们的效果的确是一样的
页:
[1]