c内存管理--内存容量

实例1:

char  str[]= “Hello” ;
char   *p= str ;
int     n= 10;
请计算
sizeof (str )= 6;//计算str数组大小,注意str是数组而不是指针,所以是6,包括’\0‘
sizeof ( p )=4;//p为指针类型,在32位环境下,自然是4个字节了
sizeof ( n ) =4;//n为int类型数据,在32位环境下,也是4个字节
void Func ( charstr[100])
{
请计算
sizeof( str )=        4;//不要被charstr[100]给诱惑了,实际charstr作为形参是一个指针,4个字节
}
void *p = malloc( 100);
请计算
sizeof ( p )//p还是一个指针类型,依然是4个字节
=       4;


实例2:

#include <stdio.h>
#include <string.h>

/*********char*******/
//只要是指针,则32位是4,64位是8
int charSize(char *a,int *b)
{
    printf("%d\n",sizeof(a));//32位是4,64位是8
    printf("%d\n",sizeof(b));//32位是4,64位是8
    printf("%u\n",strlen(a)); //9(不包含'\0')
    
}

void charSize2(char a[]) //数组退化为指针
{
    printf("%d\n",sizeof(a)); //32位是4,64位是8
}

/*******int*********/
int intSize(int a)
{
    return a=5;
}

int intSize2(int data[])//数组退化为指针
{
    return sizeof(data); //32位是4,64位是8
}

int main(void)
{
    ///char
    /*
    char *a = "123456789";  //指针a指向一个常量(相当于const char * a),不可修改其内容
    char a[] = "123456789"; //相当于char *const a,地址不可变,内容可变
    printf("a: %s\n",a);
    a[0]='a';
    printf("a= %s\n",a);
    */
    //char a[]={'1','2','3','4','5','6','7','8','9'};
    char a[]="123456789";
    printf("%d\n",sizeof(a));  //10(将'\0'也读入)
    printf("%u\n",strlen(a)); //9(不包含'\0')
    
    int b=4;
    charSize(a,&b);
  
    charSize2(a);
    
    ///int/
    int *c=&b;
    printf("%d\n",*c); //4
    
    printf("%d\n",intSize(b)); //5
    
    
    int data1[] = {1, 2, 3, 4, 5};
    int size1 = sizeof(data1);
    
    int *data2 = data1;
    int size2 = sizeof(data2);
    
    int size3 = intSize2(data1);
    
    printf("%d, %d, %d\n", size1, size2, size3); //32位是20,4,4 ; 64位是20,8,8
    //int &d=b; //c++特有引用(&)
    //printf("%d,%d\n",d,b); 
    
    return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值