gpt4 book ai didi

c - 关于C语言中指针函数的困惑

转载 作者:行者123 更新时间:2023-12-02 00:01:03 24 4
gpt4 key购买 nike

我写了一个程序来测试指针 Action ,但我没有得到输出背后的逻辑。

就好像我使用 arr+1 然后我得到第 7 而不是第 2 个位置,类似的情况是 *arr+1 我觉得 很奇怪* 表达式显示的是地址而不是值。

谁能解释输出,拜托!

程序是:

#include<stdio.h>
int main()
{
static int arr[2][3][2] = {1,2,3,4,5,6,7,8,9,10,11,12};
int i,j,k;
printf("%d\t",arr);
printf("%d\t",*arr);
printf("%d\n",**arr);
printf("%d\n",***arr);
printf("%d\t",arr+1);
printf("%d\t",*arr+1);
printf("%d\n",**arr+1);
printf("%d\n",***arr+1);
for(i=0;i<2;i++)
{
for(j=0;j<3;j++)
{
for(k=0;k<2;k++)
printf("%d %u \n",*(*(*(arr+i)+j)+k),&arr[i][j][k]);
printf("\n");
}
printf("\n");
}
return 0;
}

输出是:

4202512 4202512 4202512
1
4202536 4202520 4202516
2
1 4202512
2 4202516

3 4202520
4 4202524

5 4202528
6 4202532

7 4202536
8 4202540

9 4202544
10 4202548

11 4202552
12 4202556

最佳答案

你声明了一个int [2][3][2]数组,这意味着:

  • 表达式 arr 的类型是一个 int [2][3][2] 数组,因此您只能从该类型获取一个指针。<
  • 表达式 arr[0]*arr 的类型是一个 int [3][2] 数组,所以你只能从该类型获取指针。
  • 表达式 arr[0][0]**arr 的类型是一个 int [2] 数组,所以您只能从该类型获取指针。
  • 表达式 arr[0][0][0]***arr 的类型是一个 int,所以您只能从该类型中获取 int 值。

这个过程的变化会产生相似的结果。

你总是得到相同的基地址,因为多维数组在内存中是平坦的,并且维度大小用于划分平坦内存。

int [2][2] 就像:

0, 1
2, 3

数字类似于内存中元素的顺序,而二维显示类似于数组的行/列访问。

关于c - 关于C语言中指针函数的困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21351838/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com