实例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;
}