【问题标题】:Why pointer to arr[i] cannot be assigned while pointer to arr+i can be assigned directly? [duplicate]为什么不能分配指向 arr[i] 的指针,而可以直接分配指向 arr+i 的指针? [复制]
【发布时间】:2021-08-09 07:46:26
【问题描述】:
#include<stdio.h>

 int main()
 {
     int n;
     printf("Enter number of elements you want in array:");
     scanf("%d",&n);
     int arr[10],*a;
    //taking input from user
    for(int i=0;i<n;i++)
    {
        printf("Enter element %d: ",i);
        scanf("%d",arr+i);
    }
   
    //stroing values in array and showing them on output screen
    for (int i = 0; i < n; i++)
    {
     a=&arr[i];
     printf("Element %d:",i);
     printf("%d\n",*(arr+i));
    }
    
 }

输出:

Enter number of elements you want in array:4
Enter element 0: 5
Enter element 1: 6
Enter element 2: 7
Enter element 3: 8
Element 0:5
Element 1:6
Element 2:7
Element 3:8

上面的代码很容易显示输出,但下面粘贴的代码显示错误

#include<stdio.h>

 int main()
 {
     int n;
     printf("Enter number of elements you want in array:");
     scanf("%d",&n);
     int arr[10],*a;
    //taking input from user
    for(int i=0;i<n;i++)
    {
        printf("Enter element %d: ",i);
        scanf("%d",&arr[i]);
    }
   
    //stroing values in array and showing them on output screen
    for (int i = 0; i < n; i++)
    {
     a=&arr[i];
     printf("Element %d:",i);
     printf("%d\n",*(arr[i]));
    }
    
 }

输出:

tempCodeRunnerFile.c: In function 'main':
tempCodeRunnerFile.c:21:20: error: invalid type argument of unary '*' (have 'int')
   21 |      printf("%d\n",*(arr[i]));
      |                    ^~~~~~~~~

为什么会这样,这段代码有什么问题,为什么上面的代码运行成功???

【问题讨论】:

  • arr[i]arr + i 不同。
  • arr[i]返回数组元素的内容,不需要使用*
  • arr[i] 等价于*(arr+i)
  • arr+i 等价于&amp;arr[i]
  • *(arr[i]) 表示“取消引用存储在arr[i] 的地址”,但是arr[i] 不是指针,而是整数。

标签: c++ arrays c pointers


【解决方案1】:

指针指向内存中的地址。

如果你添加一个整数,你会移动指针:

int v = 10;
int *p = &v;
p = p + 3 // 3 addresses further. Which is currently nothing.

如果你使用星号,你会得到特定地址的值。

int v = 10;
int *p = &v;
*p == 10; // true

使用括号就像同时放置指针和取消引用一样。 p[3] 等同于*(p+3)

您已经使用了方括号,这意味着您正在尝试取消引用“int”而不是“int 指针”

【讨论】:

    猜你喜欢
    • 2021-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-16
    • 2021-03-23
    • 2021-07-28
    • 2014-08-23
    • 1970-01-01
    相关资源
    最近更新 更多