zxcbcv 发表于 2020-9-5 09:39:42

指针

#include<stdio.h>
int main()
{               
               
                int array={0};
                int i,j,k=0;
                for(i=0;i<4;i++)
                {
                        for(j=0;j<5;j++)
                        {
                                array=k++;
                               
                        }
                }
                printf("*(array+1):%p\n",*(array+1));            //这个位置*(array+1)为什么是地址,为什么不是值,而**(array+1)是值?
                printf("array:%p\n",array);
                printf("&array:%p\n",&array);
                printf("**(array+1):%d\n",**(array+1));

      return 0;
}

zxcbcv 发表于 2020-9-5 09:59:23

本帖最后由 zxcbcv 于 2020-9-5 10:26 编辑

0

风过无痕1989 发表于 2020-9-5 11:04:38

本帖最后由 风过无痕1989 于 2020-9-5 11:07 编辑

array 是一个二维数组,为了叙述方便,下面将 array 用 a 代替。但在C语言中,是将当作是4个有5个元素的一维数组处理的,即:
a、a、a、a、a;

a、a、a、a、a;

a、a、a、a、a;

a、a、a、a、a;

这样,a,a,a、a 既然是一维数组名,而C语言又规定了数组名代表数组首元素地址,因此a代表一维数组a中第0列元素的地址,即&a。也就是说,a的值是&a,a的值是&a、a的值是&a。从二维数组的角度来看,a代表二维数组0行0列元素的地址,a自然就代表1行0列元素的地址。由于a和*(a+0)等价,a和*(a+1)等价,a[ i ]和*(a+i)等价。由此可见,*(a + 1)是地址,而不是值。*(*(a + 1))才是该元素的值。

你的题有错误,系统出现报警,原因是你将 *(*(a + 1)) 写成了 **(a + 1)

之朝百 发表于 2020-9-5 12:58:16

本帖最后由 之朝百 于 2020-9-5 13:08 编辑

供参考
页: [1]
查看完整版本: 指针