定义数组

https://m.php.cn/article/417962.html

variable-sized object may not be initialized(数组的大小必须是常量):https://blog.csdn.net/weixin_44216359/article/details/127947762

数组初始化的几种方法比较

https://blog.csdn.net/qq_19734597/article/details/101516810

数组与指针

https://www.zhihu.com/question/418659897/answer/2242665892 (如何评价C语言让数组退化为指针的设计?)

函数与数组

1.函数无法返回数组

https://blog.csdn.net/qq_42366672/article/details/115179783

在c语言中如果直接返回数组类型,会编译报错。

char[] test(){
    char buf[128];
    return buf;
}

只能通过指针的方式返回

char* test(){
    char buf[128];
    return buf;
}

2.sizeof问题

定义一个char数组

char buf[128];
sizeof(buf);   //结果为128

如果把buf传入函数

void test(char[] bufOut){
    sizeof(bufOut);   //结果为8
}
test(buf);

这是因为test函数的参数bufOut实际为buf数组的指针,sizeof(bufOut)始终就是指针类型的大小。

3.c语言 char* 传入函数 利用strcpy,到函数外没有被更新.

在C语言中,字符串是字符数组,当你把一个字符串传递给函数时,实际上传递的是这个字符数组的一个拷贝,所以如果你在函数内部使用strcpy更新这个拷贝,当函数执行完毕返回时,原始的字符串是不会被更新的。

解决办法:函数直接返回char*

字符串与数组

  • 字符数组清空
    char str[100];
    memset(str, 0, sizeof(str));

数组间的引用

  • 1.数组不能用等号拷贝

  • 2.Array type 'char[50]' is not assignable

在C或C++等编程语言中,基本数据类型如int, float, double等可以直接赋值,但是数组类型(比如char[50])通常不能直接赋值,因为它们代表的是一个内容可变的数据集合,而赋值操作通常是浅拷贝,这意味着如果你尝试拷贝一个数组到另一个数组,实际上是拷贝的数组的引用而不是数组的内容。

解决方法:
要解决这个问题,你需要遍历数组并逐个复制元素。可以使用标准库中的strcpy函数(来自头文件),它用于复制字符串(即char数组)。如果你正在处理非字符串数组,你需要手动遍历数组并复制每个元素。

示例(对于字符串数组):

#include <string.h>

char str1[50] = "Hello";
char str2[50];
strcpy(str2, str1); // 正确方法:复制字符串

0 条评论

发表回复

您的电子邮箱地址不会被公开。