gpt4 book ai didi

c - 是否可以在其内部放置一个 C 数组?

转载 作者:太空宇宙 更新时间:2023-11-04 06:02:28 25 4
gpt4 key购买 nike

在许多编程语言中(包括 JavaScriptJavaRuby ),可以将数组放入其自身中。在这里,我试图将一个 C 整数数组放在其内部的第 3 个索引处,但我不确定 C 编程语言是否支持它:

#include <stdio.h>

int main(void) {
int arr[] = {1, 1, 2};
arr[2] = arr; //now I'm trying to put arr into itself.
printf("%i", arr[2]); //this prints a negative number each time I run the program
printf("%i", arr[2][0]); //prog.c:7:24: error: subscripted value is neither array nor pointer nor vector

return 0;
}

是否可以将 C 数组放入自身内部,还是根本不可能?

最佳答案

不,int 数组不可能包含自身。

您可以玩一些(可能是不可移植的)技巧,比如让数组的元素之一成为指向数组的转换指针:

int arr[10];
arr[5] = (int)arr;

但这并不能使数组包含自身。表达式 arr,因为它是数组类型,在大多数上下文中被隐式转换(“衰减”)为指向其第一个元素的指针,包括这个。因此,假设转换没有丢失任何信息,您可以通过将 arr[5] 转换回 int 类型来检索指向 arr 第一个元素的指针*。请注意,这只会为您提供指向 arr 的第一个元素的指针;它会丢失有关 arr 长度的任何信息。 int* 指针值不适合 int 而不会丢失信息是很常见的(在 64 位系统上,int*< 很常见 为 64 位,int 为 32 位)。

整数、指针和数组是三种截然不同的东西。它们不能简单地互换。

推荐阅读:comp.lang.c FAQ的第6节;它很好地解释了 C 中数组和指针之间经常令人困惑的关系。

即使在 Java 和 Ruby 这样的语言中,数组实际上也不能包含 自身。它可以包含对其自身的引用——尽管该语言可能提供语法糖来隐藏它是引用的事实。在 C 中,此类引用通常是显式的。

您可以做的是定义一个数据结构,其中包含一个指向其自身类型的对象的指针。这通常是通过结构来完成的。例如:

struct tree_node {
int data;
struct tree_node *left;
struct tree_node *right;
};

这是 C,你必须明确地管理你的树节点的内存,使用 malloc() 分配和 free() 释放 - 或者你可以使用一个现有的图书馆,可以为您做到这一点。

关于c - 是否可以在其内部放置一个 C 数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16682640/

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