gpt4 book ai didi

c - 指针 - 数组和指针的区别

转载 作者:行者123 更新时间:2023-12-01 23:34:34 25 4
gpt4 key购买 nike

a&a和首元素地址a[0]有什么区别?类似地,p 是指向分配有数组地址的整数的指针。pointer[] 会根据数据类型进行指针运算并获取值吗?此外,* 期望什么值?它应该是一个指针吗?

#include<stdio.h> 
int main()
{
int a[] = {5,6,7,8};
int *p = a;
printf("\nThis is the address of a %u, value of &a %u, address of first element %u, value pointed by a %u", a, &a, &a[0], *a);
printf("\nThis is the address at p %u, value at p %u and the value pointed by p %d", &p, p, *p);
printf("\n");
}

This is the address of a 3219815716, value of &a 3219815716, address of first element 3219815716, value pointed by a 5
This is the address at p 3219815712, value at p 3219815716 and the value pointed by p 5

最佳答案

int a[]={5,6,7,8};
int *p= a;

请注意,在数组的情况下(在大多数情况下),比如数组 aADDRESS_OF aADDRESS_OF 相同 数组的第一个元素。即,ADDRESS_OF(a)ADDRESS_OF(a[0]) 相同。 &ADDRESS_OF 运算符,因此在数组 a 的情况下,&a&a[0 ] 都是一样的。

我已经强调过,在大多数情况下,数组的名称会转换为它的第一个元素的地址;一个值得注意的异常(exception)是当它是 sizeof 的操作数时,如果与 malloc 相关的东西要起作用,这是必不可少的。另一种情况是数组名称是 & 地址运算符的操作数。在这里,它被转换成整个数组的地址。有什么不同?即使你认为地址在某种程度上是“相同的”,关键的区别在于它们有不同的类型。对于包含 n 个 T 类型元素的数组,第一个元素的地址类型为“指向 T 的指针”;整个数组的地址类型为“指向 T 类型的 n 个元素的数组的指针”;显然非常不同。

举个例子:

int ar[10];
int *ip;
int (*ar10i)[10]; /* pointer to array of 10 ints */

ip = ar; /* address of first element */


ip = &ar[0]; /* address of first element */
ar10i = &ar; /* address of whole array */

更多信息可以引用The C Book.

关于c - 指针 - 数组和指针的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7725008/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com