Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 将地址传递给指针是否会导致类型升级_C_Arrays_Pointers - Fatal编程技术网

C 将地址传递给指针是否会导致类型升级

C 将地址传递给指针是否会导致类型升级,c,arrays,pointers,C,Arrays,Pointers,初始化给定语句中的指针p时 int a[10], *p; p = &a[0]; 我怀疑&a[0]的类型是指向int的指针还是int? 我读了这篇文章后感到困惑: 使用a作为数组中第一个元素的指针,我们可以修改a[0]:*a=7 注意:我想知道&a[0]的类型 一个[0]的地址是指向整数的指针类型。 您可以修改数组的第一个元素,因为*a相当于*(a+0),它只不过是a[0]a[0]的地址是指向整数的指针类型。 您可以修改数组的第一个元素,因为*a相当于*(a+0),它只不过是a[0]是地

初始化给定语句中的指针
p

int a[10], *p;
p = &a[0];
我怀疑
&a[0]
的类型是指向int的
指针还是
int

我读了这篇文章后感到困惑:

使用
a
作为数组中第一个元素的指针,我们可以修改a[0]:
*a=7


注意:我想知道
&a[0]
的类型

一个[0]
的地址是指向整数的指针类型。
您可以修改数组的第一个元素,因为
*a
相当于
*(a+0)
,它只不过是
a[0]

a[0]
的地址是指向整数的指针类型。 您可以修改数组的第一个元素,因为
*a
相当于
*(a+0)
,它只不过是
a[0]

是地址运算符,
&a[0]
取数组
a
的第一个元素的地址,所以它是
int*
。由于
[]
的长度大于
*
,因此您可以按如下方式阅读:

&(a[0])
这可能更清楚。如果您有以下情况:

p = a ;
对数组执行操作。

是地址运算符,因此,
&a[0]
取数组
a
的第一个元素的地址,因此它是
int*
。由于
[]
的长度大于
*
,因此您可以按如下方式阅读:

&(a[0])
这可能更清楚。如果您有以下情况:

p = a ;

由于历史原因,对阵列没有任何影响。

 p = a; 

它们是等价的。当心

auto q = &a; 

也是合法的,但q的类型将不是int*,而是int[10]*。这可能不是你想要的。

出于历史原因

 p = a; 

它们是等价的。当心

auto q = &a; 

也是合法的,但q的类型将不是int*,而是int[10]*。这可能不是您想要的。

&a[0]
是指向
int
的指针。以下是对此的解释步骤:

  • &a[0]
    被解析为
    &(a[0])
    ,因为下标运算符
    []
    比地址运算符
    &
    绑定得更紧密
  • a
    是一个数组,但在本例中,它会自动转换为指向其第一个元素的指针。(如果它是
    sizeof
    \u Alignof
    &
    的操作数,或者是用于初始化数组的字符串文字,则不会进行转换。)
  • a[0]
    接受指针并成为第一个元素(元素0)的左值
  • &(a[0])
    是指向
    a[0]
    的指针。因为我们知道
    a[0]
    int
    ,所以指向
    a[0]
    的指针是指向
    int
    的指针
然后
p
被分配
&a[0]
的值。因此,
p
是指向
a
的第一个元素的指针


由于
p
是指向
a
的第一个元素的指针,
*p
是该元素的左值。左值可用于赋值的左侧,以赋值给它所引用的对象。

&a[0]
是指向
int
的指针。以下是对此的解释步骤:

  • &a[0]
    被解析为
    &(a[0])
    ,因为下标运算符
    []
    比地址运算符
    &
    绑定得更紧密
  • a
    是一个数组,但在本例中,它会自动转换为指向其第一个元素的指针。(如果它是
    sizeof
    \u Alignof
    &
    的操作数,或者是用于初始化数组的字符串文字,则不会进行转换。)
  • a[0]
    接受指针并成为第一个元素(元素0)的左值
  • &(a[0])
    是指向
    a[0]
    的指针。因为我们知道
    a[0]
    int
    ,所以指向
    a[0]
    的指针是指向
    int
    的指针
然后
p
被分配
&a[0]
的值。因此,
p
是指向
a
的第一个元素的指针


由于
p
是指向
a
的第一个元素的指针,
*p
是该元素的左值。左值可用于赋值的左侧,以赋值给它所引用的对象。

a[0]
是一个int,因此
&a[0]
是指向int的指针。
&(something)
是指向该对象的指针。您所困惑的是对指针的赋值,因为当
*
在某个东西前面加上前缀时,赋值的效果不同。请留下您的注释。
a[0]
是一个int,所以
&a[0]
是指向int的指针。
&(某物)
是指向该东西的指针。你所困惑的是指针的赋值,由于赋值工作不同,当代码> *//>前缀有下级选民时,请留下你的评论。<代码>自动q=和a < /C> >不是C。这个问题用C加上标记,而不是用C++。<代码>自动q=和a < /> >不是c。这个问题用C加上标记,而不是用C++。是不是
a
整数数组类型
并提升为
指向int的指针
?@haccks这是数组衰减为指针:@haccks它将是
int*
@haccks:In
p=a
a
转换为指向
int
的指针。我只是称之为转化,而不是提升或衰退。表达式中的任何数组对象(不仅仅是一个简单的标识符;它可以通过各种方式计算,例如取消对数组指针的引用)都会自动转换为指向数组第一个元素的指针,除非该数组是
sizeof
\u Alignof
的操作数,或
&
或是用于初始化数组的字符串文字。是的,在语句
p=a
中,类型o