相关疑难解决方法(0)

为什么数组的地址等于它在C中的值?

在下面的代码中,指针值和指针地址按预期不同.

但数组值和地址不行!

怎么会这样?

产量

my_array = 0022FF00
&my_array = 0022FF00
pointer_to_array = 0022FF00
&pointer_to_array = 0022FEFC
Run Code Online (Sandbox Code Playgroud)
#include <stdio.h>

int main()
{
  char my_array[100] = "some cool string";
  printf("my_array = %p\n", my_array);
  printf("&my_array = %p\n", &my_array);

  char *pointer_to_array = my_array;
  printf("pointer_to_array = %p\n", pointer_to_array);
  printf("&pointer_to_array = %p\n", &pointer_to_array);

  printf("Press ENTER to continue...\n");
  getchar();
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

c arrays pointers

179
推荐指数
5
解决办法
7万
查看次数

是a,&a,*a,a [0],&a [0]和&a [0] [0]相同的指针?

我有以下C程序:

#include <stdio.h>

int main(){
    int a[2][2] = {1, 2, 3, 4};
    printf("a:%p, &a:%p, *a:%p \n", a, &a, *a);
    printf("a[0]:%p, &a[0]:%p \n", a[0], &a[0]);
    printf("&a[0][0]:%p \n", &a[0][0]);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

它给出了以下输出:

a:0028FEAC, &a:0028FEAC, *a:0028FEAC
a[0]:0028FEAC, &a[0]:0028FEAC
&a[0][0]:0028FEAC
Run Code Online (Sandbox Code Playgroud)

我无法理解为什么&a,a,*a-所有相同.同样的a[0],&a[0]&a[0][0].

编辑:

感谢答案,我已经理解为什么这些价值观会相等.Kernighan&Ritchie的书中的这一行被证明是我问题的关键:

 the name of an array is a synonym for the location of the initial element.
Run Code Online (Sandbox Code Playgroud)

所以,通过这个,我们得到了

a= &a[0],和

a[0]= &a[0][0] (考虑a作为数组的数组) …

c arrays pointers multidimensional-array

8
推荐指数
4
解决办法
9718
查看次数

为什么A [0],&A和*A的值输出相同?

我正在做一个小实验.

#include<cstdio>
#include<iostream>
using namespace std;
int main()
{

  int A[5][5];
  cout<<A[0]<<"  "<<&A<<"   "<<*A;
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

它为所有情况打印相同的值.有人可以解释为什么会这样吗?

c++

-1
推荐指数
1
解决办法
390
查看次数

标签 统计

arrays ×2

c ×2

pointers ×2

c++ ×1

multidimensional-array ×1