c - 在我下面的代码中,为什么 ptr[0] 的值和地址相同。 ptr[1] 和 ptr[2] 的行为相同

标签 c arrays pointers

在我下面的代码中,为什么 ptr[0] 的值和地址是相同的。 ptr[1]ptr[2] 的行为相同。

#include<stdio.h>

int main()
{
    int var=100;
    int(*ptr)[5];//array of pointer.

    ptr=&var;
    printf("Value of var is  : %d\n",var);
    printf("Address of var : %u\n",&var);
    printf("Value inside ptr after ptr=&var : %u\n",ptr[0]);
    printf("Value of ptr[0] is  : %d\n", ptr[0]);
    printf("Adress of ptr[0] is  : %u\n",&ptr[0]);

    printf("Value of ptr[1] is  : %d\n",ptr[1]);
    printf("Adress of ptr[1] is  : %u\n",&ptr[1]);

    printf("Value of ptr[2] is  : %d\n",ptr[2]);
    printf("Adress of ptr[2] is  : %u\n",&ptr[2]);
    return 0; 
}

最佳答案

在你的情况下

  int(*ptr)[5];//array of pointer.

不完全是“指针数组”。。相反,它是一个指向 5 个 int 数组的指针。

所以,

 ptr=&var;

是错误的,因为 &var 不是指向数组的指针。

然后,由于越界访问,访问ptr[1] 是绝对错误的。 ptr 本身并不是一个数组。

你可能想重写

  int(*ptr)[5];

作为

   int *ptr[5];

也就是说,

  1. int main() 应该是 int main(void),按照标准。
  2. 始终使用%p 打印地址。此外,在作为参数传递之前,将指针转换为 (void *),因为 %p 需要一个 void *

关于c - 在我下面的代码中,为什么 ptr[0] 的值和地址相同。 ptr[1] 和 ptr[2] 的行为相同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31333702/

相关文章:

c - c如何计算余数?

Java-使用compareTo()方法手动对字符串数组进行排序

assembly - 字节ptr和字ptr的区别

c++ - 返回局部变量 C++ 的指针

c - 如何检测代码意外创建指向指针的指针的实例?

c - mbed CLI : make. py:错误:找不到 ARM 的可执行文件

c - 试图在 Linux 上关闭 sleep

c - 用c语言编写getline函数

c# - 使用数组对最近的数字进行排序

javascript - 方法作为参数类型