CC++经常记不得的地方

    技术2025-07-08  11

    1、常量指针VS指针常量

    const int* 和int const* int 一样,就是常指针 也就是它所指向的数据(在这是int)是常量,它自己的数据类型是const int*

    int* const p;   // 指针常量 指针p指向的值不可修改   const修饰的是 p2   3  const int* p;   // 常量指针 指针p不可修改          const修饰的是 *pint const* p;   // 常量指针 指针p不可修改

    2、指针数组VS指向数组的指针

    指针数组,是指数组元素为指针的数组

    int* P[N];

    指向数组,的指针指的是数组中的每个元素是一个指针

    int (*P)[N];

    3、sizeof数组和指针

    int arr[5];cout<<sizeof(arr);    // 输出是20

    因为是sizeof(int)*5

    可以用通过它来计算一个数组的元素个数

    当数组是函数的参数时,sizeof对它不可用

    因为指针本身是32位四个字节的

    所以

    char* p; sizeof(p) == 4;

    标准C++中 其返回类型为size_t

    标准C++的 sizeof还可以作用于对象

    sizeof引用 返回引用对象的存储大小

    sizeof指针的解引用 返回解引用的空间大小

    4、数组引用

    int (&arr)[N];

    5、指向函数的指针

    int (*fun)(int, int)

    6、函数接口中的指向指针的指针

    7、 || 和 && 操作符第一个操作数往往能决定最终结果 从而忽略第二个操作数

    8、%的操作数要是整形

    9、!对于非0操作 结果是fasle

    10、判断bool的变量val是否成立时候 通常用if(val)

    11、位异或是^ 就是位的非进位加法

    12、*p++相当于 *(p++) 由于++在后 还是对原先的p进行解引用的

    13、if((i = 5) > 0) 先赋值 再判断 注意为什么加括号

    14、i = p = 7; 这里是右结合的

    15、*iter.empty();  . 的优先级高一些 所以是错误的表达

    16、iter++->empty(); 先empty再++

    17、条件表达式的优先级相当低

    cout<<(i < j ? i : j);

    cout<<(i < j) ? i : j;   // 等价于cout ? i : j

    cout<<i < j ? i : j;       // 错误 cout < j ? i : j

    18、优先级的判断

    19、new和delete

    int *p = new int(10);

    int *p = new int[10];

    int *p = new int[10](10);

    delete是针对内存的 不是new出来的内存就无法释放了

    int i;

    int *p = &i;

    delete p;  // error 但是大部分编译器还能通过

    如果p = NULL;

    delete p也是安全的

    const int *p = new const int(1024);

    new出来的const不可被修改但同样可以被删除

    delete p;

    20、 可变参数

    void va_start( va_list arg_ptr, prev_param );type va_arg( va_list arg_ptr, type );void va_end( va_list arg_ptr );   1  void simple_va_fun(int i, ...){  va_list arg_ptr;  int j=0;   va_start(arg_ptr, i);  j=va_arg(arg_ptr, int);  va_end(arg_ptr);  printf("%d %d/n", i, j);  return;10  }

    1)首先在函数里定义一个va_list型的变量,这里是arg_ptr,这个变量是指向参数的指针。 2)然后用va_start宏初始化变量arg_ptr,这个宏的第二个参数是第一个可变参数的前一个参数,是一个固定的参数。 3)然后用va_arg返回可变的参数,并赋值给整数j. va_arg的第二个参数是你要返回的参数的类型,这里是int型。 4)最后用va_end宏结束可变参数的获取.然后你就可以在函数里使用第二个参数了.如果函数有多个可变参数的,依次调用va_arg获取各个参数。

    21、main的参数

    main(int argc, char*argv[])

    参数字符串  列表是argv

    参数个数是argc

    22、main的返回值

    主函数main的返回值为EXIT_FAILURE EXIT_SUCCESS返回失败和成功在 cstdlib.h中定义

    通常情况下返回0是成功,大部分返回非0表示失败

    23、返回引用是高效的,但是返回局部量的引用是错误的

    24、返回引用是可以是左值的

    char &get_val(string &s, string::size_type n){    return s[n];}5   6  main(){    string s("this is a string");    get_val(s, 0) = 'A';10  }
    最新回复(0)