【C/C++笔记】 C/C++常见问题笔记 2

传送到上一篇: C/C++常见问题笔记 1


  • malloc() 与 new 区别

    1、属性:malloc() 是库函数,而new是关键字(运算符);

    2、位置:使用 malloc() 分配空间在堆中,new 分配的空间在自由存储区;

    3、参数:malloc() 分配空间大小由参数确定,new分配空间大小为创建对象大小;

    4、返回值:malloc() 返回值为void*类型,new返回值为确定的类型指针(安全);

    5、失败:分配失败情况下,malloc() 返回NULL,new会抛出bac_alloc异常;

    6、重载:new运算符允许被重载,malloc不能被重载;

    7、调用:new运算符会调用类的构造函数,delete会调用类的析构函数;

    8、再分配:malloc() 分配内存不足或过多时,可以使用 realloc() 扩充或缩减。

    参见:  new与malloc区别@ywliao         new和malloc区别@Datou_Nie


  • 函数作为左值

    当且仅当函数返回值为引用类型时,可以使用函数作为左值。其他情况不能作为左值使用。

见下面例子:

#include<stdio.h>

int a[2] = { 1, 2};

int &func( int i) {
	return a[i];
}

int main()
{
	func( 1) = 10;    // 设置a[1]值为10
	printf( "a[0] = %d, a[1] = %d\n", a[0], a[1]);
	return 0;
}

// output: a[0] = 1, a[1] = 10


  • 函数参数设置默认值

    c++函数可设置带默认值的参数,且这种参数必须要在不带默认值的参数之后

    有两种方法对其实现:一种是在声明的时候设置参数默认值,一种是在定义的时候设置默认参数。

    两种方法可以混合使用,但不能同时设置一个参数的默认值。

#include<stdio.h>

int add( int a, int b=10);
int sub( int a, int b);

int add( int a=12, int b)
{
	return a+b;
}

int sub( int a, int b=3)
{
	return a-b;
}

int main()
{
	printf( "add()=%d\tadd(1)=%d\tadd(1,3)=%d\tsub(4)=%d\t\n", add( ), add( 1), add( 1, 3), sub( 4));
	return 0;
}

// output:
// add()=22        add(1)=11       add(1,3)=4      sub(4)=1

另附:c语言参数默认值实现


  • sizeof 与 strlen区别

    sizeof:sizeof 是运算符,其运算结果在编译时已经确定。因此不会随着数据结构的动态扩充来改变其结果。

    strlen:strlen 是一个函数,其参数为char*,返回结果为当前数组空间下字符串的长度。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值