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

  • 引用和指针的区别:
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在谁前面就是修饰谁

  • 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

猜你喜欢

转载自blog.csdn.net/zhanw15/article/details/79908874