zoukankan      html  css  js  c++  java
  • sizeof 的退化问题

    前言


      首先来看一道例题,如果你会了就不用往下看了

    void test1 (char * s){
        printf("%d
    ", sizeof(s));  
    }
    
    void test2 (char s2[]) {
        printf("%d
    ", sizeof(s2));    
    } 
    
    int main() {
        char *s = "1234567890";
        test1(s);
        char s2[10] = sizeof(s2);
        printf("%d
    ", sizeof(s2));
        char s3[10];
        printf("%d
    ", sizeof(s3));    
        return 0;
    }

    解答


      在 C 语言中,sizeof() 是一个判断数据类型或者表达式长度的运算符,它返回一个对象或者是类型所占的内存字节数。所以,在 main 函数中打印的 s3 是 10。

      但是 test1 中打印的 s 与 test2 中打印的 s2 并不是字符串的长度 10。因为test1 与 test2 函数传参时是地址传递(指针传递),所以此时 sizeof 的作用对象实际上是指针而不是原来的字符串或者是数组,因为指针一般是 4 字节 或者是 8 字节,所以在 test1 、test2 中打印出来的值都是8。这就是所谓的sizeof 退化问题。

    ————全心全意投入,拒绝画地为牢
  • 相关阅读:
    前端(基础篇)
    面向对象
    python(进阶篇)
    Python(基础篇)
    pycharm中添加python3 的环境变量
    MySQL与MongoDB的不同
    pycharm中添加python3 的环境变量
    ContentType&CORS&Git
    RESTful 组件
    Django REST_framework Quickstart
  • 原文地址:https://www.cnblogs.com/Bw98blogs/p/8151037.html
Copyright © 2011-2022 走看看