gpt4 book ai didi

c - C 中的函数和数组

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

我正在学习 C 语言来为 Linux 进行开发,我正在尝试从作为函数参数的数组中获取 sizeof()sizeof 总是返回 8(即指针的大小)所以问题是,在 C 中所有参数都是指针?如果不是,这段代码有什么问题?

#include <stdio.h>
#include <stdlib.h>

int println(char text[]);

int main()
{
char text[] = "Helloabc";
int x = println(text);
x = x + 48;
char y[] = { (char)x };
printf("%s\n", y);
return 0;
}

int println(char text[])
{
int size = sizeof(text) / sizeof(text[0]);
int size1 = sizeof(text);
int size2 = sizeof(text[0]);
printf("%i\n", size1);
printf("%i\n", size2);
return size;
}

这段代码产生了这个返回:

8
1
8Helloabc

它也是出于某种奇怪的原因打印“Helloabc”。

最佳答案

通常数组不同于指针。但是,当作为参数传递时,数组将转换为指针。如果你想得到数组的大小,你应该将它作为另一个参数传递,或者在数组中设置一个标记并手动计算大小。

至于为什么打印“Helloabc”,是因为你的char y[]没有\0作为字符串的结尾。因此,当您将 printf y 作为字符串(通过 %s)时,它会一直运行直到找到 \0

然后会发生什么?注意x,y和text都是在栈上的,栈是从内存高位到内存低位的。所以你的堆栈现在看起来像这样: stack

(我举了一个错误的例子,发现不是这样,抱歉。现在我修正了它。)

所以,printf首先输出0x38('8')。然后继续“Helloabc”,最后找到 '\0'

这就是你得到“8Helloabc”的原因。

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

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