gpt4 book ai didi

c - C中定义的数组类型

转载 作者:行者123 更新时间:2023-12-01 15:11:28 27 4
gpt4 key购买 nike

我刚刚在“The C Programming Language”一书中读到数组不是变量,因此无法将数组赋值给指针(反之亦然)。那么,如果数组不是变量,那么它是什么?

最佳答案

int numbers[] = {1,2,3}

numbers 不是变量,它是数组名称,它只是数组中第一个元素的地址。要验证这一点,请查看 numbers 的地址和 numbers[0] 的地址,方法是:printf("%p and %p and %p ", &numbers, numbers, &numbers[0]); 所有三个指针都将具有相同的值,因为 numbers 只不过是数组中第一个元素的地址。因此 numbers 不是包含指针或值的变量,因为它在内存中没有专用地址来存储值。

但是,看看这个指针变量:

int *pnumbers = numbers;
`printf("%p and %p and %p", &pnumbers, pnumbers, &pnumbers[0]);`

你会注意到 &pnumbers 在内存中有一个不同的地址,那是因为 pnumber 在内存中有一个专用地址,它将第一个元素的地址存储在内存中数组 numbers

将所有代码放在一起:

#include <stdio.h>

main(){
int numbers[] = {1,2,3};
printf("%p and %p and %p\n", &numbers, numbers, &numbers[0]); // Address of numbers, value of numbers, first element of numbers

int *pnumbers = numbers;
printf("%p and %p and %p\n", &pnumbers, pnumbers, &pnumbers[0]); // Address of pnumbers, value of pnumbers, first element of the array pnumbers is pointing to
}

输出

0xbfb99fe4 and 0xbfb99fe4 and 0xbfb99fe4 // All three have the same address which is the address of the first element in the array
0xbfb99fe0 and 0xbfb99fe4 and 0xbfb99fe4 // The first one is different since pnumbers has been allocated a memory address to store a pointer which is the first element of the array numbers

关于c - C中定义的数组类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24125294/

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