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


    本文为笔者在学习和使用C/C++时遇到的一些问题,在此总结记录下来。篇内借鉴了很多文章,也加上了一些自己的想法,如有不妥之处,还请不吝赐教!


  • 引用和指针的区别:
1

创建时:  引用创建的时候必须要初始化,指针不必。

2

存储时:  引用不占内存空间,指针在栈中占用空间。

3

特    点:  引用是变量或对象的别名。

4

指    向:  指针可以改变指向对象,引用不可以!!!

5

注意 !: 引用不能指向空值。

int main()
{      
    int a = 10, b = 20, &p = a;  
    p = b; 
    printf("a=%d b=%d p=%d\n", a, b, p);  
   
    return 0;      
} 
//输出是: a=20 b=20 p=20.
//并不是p指向了a,而是把b的值赋给了a

常引用&引用详解:送上一篇好文章@觅思.澈


  • const修饰符几种用法
int const a
                        表示a是一个常量
const int a
                        同上
int *const a                        表示a是一个指针常量,必须进行初始化(拒绝改写、only read)
          int const *a                                  可以改变指向的对象,但不能直接改变其指向变量的值
const int *a                        同上
   int const &a                           表示a是一个常引用,不能改变a中的值   
const int &a                        同上( 注:没有 int &const a这种写法)
const还可以修饰成员函数为 常成员函数,此类函数不能修改成员变量的值。
总结: const int 与 int const 等价,const在谁前面就是修饰谁。

  • C/C++运算符优先级

    转载:c语言运算符优先级


  • 指针函数与函数指针

    指针函数    

      int *func( int a)      指针函数是返回值为指针的函数。                                             
    函数指针          int ( *f)( int a)        函数指针是一个指针,它指向一个函数。                                  

由于()运算的优先级高于 * ,所以函数名先结合(), 再结合 int *

int max( int a, int b) {
	return a>b?a:b;
} 

int min( int a, int b) {
	return a<b?a:b;
}

int main()
{
	int (*func)( int a, int b);
	
	func = max;
	printf( "%d\n", func( 5, 3));
	
	func = min;
	printf( "%d\n", func( 5, 3));
	return 0;
}

//  输出结果: 5  3
//  func指针两次分别指向不同的函数.


  • 内存分配和管理函数
void *calloc( size_t num, size_t size)分配一块指向num的size长度的数组空间,并进行初始化
void *malloc( size_t size)                   分配指向一个大小为size的空间,如果错误则返回NULL  
void *realloc( void *ptr, size_t size)  将ptr指向的空间改为size大小,如果错误则返回NULL   
void free( void *ptr)                            释放ptr指向的空间,以供以后使用                                 

注意!以上分配的空间在逻辑地址上都是连续的,在物理空间上不一定连续。


  • 形参和实参( 指针作为参数)

   这篇文章写得很详细: 指针参数@DayThinking

   简单来说,除引用外,其它传入的实参都需要copy一份进行函数调用。


  • C++内存布局

  链接到两篇好文章:堆、栈、静态区区别         自由存储区和堆区别

           由程序员进行请求分配和自主释放(使用内存非配函数)
           由系统分配回收,用于储存局部变量(空间较小)
自由存储区           使用 new/delete 进行分配的空间
常量存储区           存储常量数据
全局/静态存储区           存储全局变量与静态变量
  自由存储区是抽象的概念,new 运算符可由 malloc() 实现


传送到下一篇:  C/C++常见问题笔记 2
const还可以修饰成员函数为常成员函数,此类函数不能修改成员变量的值。
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值