gpt4 book ai didi

c - 如何在C中使用指针类型?

转载 作者:行者123 更新时间:2023-11-30 14:53:41 24 4
gpt4 key购买 nike

我最近在研究指针和数组。假设我初始化一个数组,如

 int a[4]={6,2,3,4};

读了很多书后,我明白了

1) a&a 将指向相同的位置。但它们不指向相同的类型。

2) a 指向数组的第一个元素,该元素是整数值,因此 a 的类型为 int*

3) &a 指向整个数组(即大小为 4 的整数数组),因此类型为 int (*)[]

现在我实际上不明白的是如何使用这些类型?

例如:代码1:

#include<stdio.h>
void foo(int (*arr)[4],int n)
{
int i;
for(i=0;i<n;i++)
printf("%d ",*(*arr+i));
printf("\n");
}
int main()
{
int arr[4]={6,2,3,4};
foo(&arr,4);
return 0;
}

代码2:

#include<stdio.h>
void foo(int *arr,int n)
{
int i;
for(i=0;i<n;i++)
printf("%d ",*(arr+i));
printf("\n");
}
int main()
{
int arr[4]={6,2,3,4};
foo(&arr,4);
return 0;
}

在代码 2 中,我们传递了 &arr,因此它的类型应该是 int (*)[],那么即使我们的类型是 int *,为什么我们仍能得到正确的输出。

我实在不明白type的含义是什么以及如何使用?

请用一些例子来解释一下。

最佳答案

代码 2 不是有效的 C,因为数组指针和 int 指针之间的转换不是有效的指针转换 - 它们不是兼容的类型。如果它有效,那是因为您的编译器的某些非标准扩展,或者可能您只是“幸运”。

请注意,在现代 C 语言中将数组传递给函数的最佳方法是:

void foo(int n, int arr[n])
{
for(int i=0;i<n;i++)
printf("%d ",arr[i]);
printf("\n");
}

作为函数参数列表的一部分,arr 将调整为指向数组第一个元素的指针,类型为 int*

迂腐的正确版本还将 int nint i 替换为 size_t,这是描述物体的大小。

关于c - 如何在C中使用指针类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47089208/

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