stdio.h:管理输入输出(如 printf、scanf)
stdlib.h:管理内存(如 malloc、free)

malloc 用于动态开辟内存空间。
示例:(int*)malloc(4) 表示开辟4字节空间,用于存储一个 int 类型数据。
但需要注意:操作系统底层每次申请内存空间以 4KB 为最小单位(内存页大小),即使只申请4字节,系统也会分配4KB。不过 malloc 会在这4KB中切割出4字节返回给用户,剩余空间由内存管理器维护以备后续使用。

C语言允许越界操作


C语言允许越界操作,数组越界访问不会报错(编译和运行时都不会检查)。
安全隐患:
-
溢出读:能读取到越界的数据,可能读到其他程序正在运行的数据,造成信息泄露
-
溢出写:能覆盖越界的内存区域,可能导致其他程序崩溃或被攻击者利用(如缓冲区溢出攻击)



sizeof 对指针类型做计算时,返回的是指针本身的大小(在64位系统下为8字节),而不是指针所指向区域的大小。
指针所指向的区域,无法通过指针本身来计算它的大小;而非指针类型(如数组名)是可以的。

如果是sizeof(指针)只计算指针所指向区域的第一个元素大小
面试点

C、Java 只有值传递,C++ 既有值传递又有引用传递。
在 C 和 C++ 中,函数的入参如果传数组,实际上会退化为指针类型。


在C语言和C++中,函数的入参传数组只能是指针类型
上述图片函数中的int arr[10]默认转化成下图函数中的int* arr

数组作为参数传递时,通常会额外传入一个数字来表示数组的元素个数,因为函数内部无法通过 sizeof 获取到原始数组的大小。

1509



被折叠的 条评论
为什么被折叠?



