C/C++易错知识点记录(一)

这篇博客详细记录了C/C++编程中的一些常见错误和陷阱,包括指针操作、自增自减、类型安全、函数模板、STL容器、算数符优先级、内存管理和类型转换等多个方面。通过实例解析,帮助读者理解和避免这些易错点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

C/C++易错知识点记录(一)

  1. 用户自定义标识符由字母、数字和下划线组成,只能由字母或下划线开头.

  2. 指针问题:
    例1:

    int **pp,*p,a=10,b=20;
    pp=&p;
    p=&a;
    p=&b;
    printf("%d,%d",*p,**pp)
    

    pp = &p; pp中储存p的地址,就是指针p的地址
    p = &a;p中储存a的地址,就是p指向a,*p=a=10;
    p = &b;p中储存b的地址,就是p指向b,*p=b=20;
    *pp = p
    **pp = *p = b = 20

    例2:

    int main()
    {
         
     int a[5]  = {
         1, 2, 3, 4, 5};
     int *ptr = (int*)(&a + 1);
     printf("%d, %d", *(a + 1), *(ptr - 1));
     return;
    }
    

    &a + 1: 取数组a 的首地址,该地址的值加上sizeof(a) 的值,即&a + 5*sizeof(int),也就是下一个数组的首地址,显然当前指针已经越过了数组的界限。(int *)(&a+1): 则是把上一步计算出来的地址,强制转换为int * 类型,赋值给ptr。*(a+1): a,&a 的值是一样的,但意思不一样,a 是数组首元素的首地址,也就是a[0]的首地址,&a 是数组的首地址,a+1 是数组下一元素的首地址,即a[1]的首地址,&a+1 是下一个数组的首地址。所以输出2*(ptr-1): 因为ptr 是指向a[5],并且ptr 是int * 类型,所以*(ptr-1) 是指向a[4] ,输出5。
    例3:
    p++ :表示先访问p,然后p++;
    (p)++: 表示先访问p,然后将*p的值++;p指针不变。

  3. 自增自减:

      #include < stdio. h >
      int d = 1;
      void fun( int p )
      {
         
           int d
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值