相关疑难解决方法(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万
查看次数

数组/ arrayname不是指向C中第一个元素的指针吗?

下面的内容是不是arrayname总是指向C中第一个元素的指针?

int myArray[10] = {0};

printf("%d\n", &myArray); /* prints memadress for first element */
printf("%d\n", myArray); /* this prints a memadress too, shows that the name is a pointer */

printf("%d\n",sizeof(myArray)); /* this prints size of the whole array, not a pointer anymore? */
printf("%d\n",sizeof(&myArray)); /* this prints the size of the pointer */
Run Code Online (Sandbox Code Playgroud)

c arrays pointers

6
推荐指数
2
解决办法
1962
查看次数

指针和该指针的地址导致相同的事情

当我看到这些线条时:

BYTE MessageToProcess[MAX_MESSAGE_LENGTH];
TcpIpPacketHdr *pHdr = (TcpIpPacketHdr*)&MessageToProcess;
Run Code Online (Sandbox Code Playgroud)

我对自己说,第二行必须是这样的:

TcpIpPacketHdr *pHdr = (TcpIpPacketHdr*)MessageToProcess;
Run Code Online (Sandbox Code Playgroud)

但是当我检查调试模式时,"pHdr"指向与两个示例中的"MessageToProcess"相同的东西,而在第一个代码中的MessageToProcess之前有一个"&",所以通常pHdr应该包含MessageToProcess的地址而不是它指向的字节的地址,例如,messageToProcess中的第一个元素.

那么问题是怎么回事?我们正在处理指向字节而不是函数的指针,因此添加&必须更改等式.

稍后在代码中我们使用pHdr,如下所示:

pHdr->size+2
Run Code Online (Sandbox Code Playgroud)

但最初,在第一个代码中,它确实包含将地址保存到数组的第一个字节的指针的地址.

c c++ pointers

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

标签 统计

c ×3

pointers ×3

arrays ×2

c++ ×1