c - C 中的函数和数组

标签 c arrays pointers

我正在学习 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/

相关文章:

iphone - 如何进行向后搜索以找到第二个空格/空白并将其替换为另一个字符串?

c - 如何将字符数组中的内容写入文本文件?

c++ - 针对 libstdc++.so.5 进行编译未找到符号 @GLIBCPP_3.2

arrays - 如何为每个 CollectionView 部分拥有不同的数据集?

javascript - 在多个地方使用相同的随机数 (JavaScript)

python - 计算一个数组中存在于另一个数组中的项目数?

c++ - 使用 apr_shm 库指向结构体中的指针

c - 在 Ubuntu 中执行此 C 代码时出现内存泄漏

c - 如何在函数中分配数组,然后重新分配它

c++ - 在 C++ 中的函数定义中混合指针和引用