指针的⼤⼩--sizeof问题
指针的⼤⼩是问:⼀个指针变量占⽤多少内存空间?
分析:既然指针只是要存储另⼀个变量的地址,。注意,是存放⼀变量的地址,⽽不是存放⼀个变量本⾝,所以,不管指针指向什么类型的变量,它的⼤⼩总是固定的:只要能放得下⼀个地址就⾏!(这是⼀间只有烟盒⼤⼩的“房间”,因为它只需要⼊⼀张与着地址的纸条)。
存放⼀个地址需要⼏个字节?答案是和⼀个 int 类型的⼤⼩相同:如果32位系统,4字节,32除以8为4;如果是64位系统则是64除以8,8字节 。
所以,若有:
int* pInt;
char* pChar;
bool* pBool;
float* pFloat;
double* pDouble;
则:sizeof(pInt)、sizeof(pChar)、sizeof(pBool)、sizeof(pFloat)、sizeof(pDouble)的值全部为:4。
PS:你敢拆电脑吗?拆开电脑,认得硬盘数据线吗?仔细数数那扁宽的数据线由⼏条细线组成?答案:32条,正是 4 * 8。
附:sizeof和strlen的区别
❀第⼀个例⼦:
char* ss = "0123456789";
1、sizeof(ss)的结果是4,ss是指向字符串常量的字符指针
2、sizeof(*ss)的结果是1,*ss是第⼀个字符
❀第⼆个例⼦:
char ss[] = "01233456789";
sizeof 指针1、sizeof(ss)结果是11,ss是数组,计算到'\0'的位置,因此是10+1
2、sizeof(*ss)结果是1,*ss是第⼀个字符
❀第三个例⼦
char ss[100] = "0123456789";
1、sizeof(ss)的结果是100,ss表⽰在内存中预分配的⼤⼩:100*1
2、strlen(ss)的结果是10,它的内部实现是⽤⼀个循环计算字符串的长度,直到'\0'为⽌。
❀第四个例⼦
int ss[100] = "0123456789";
1、sizeof(ss)的结果是400,ss表⽰在内存中的⼤⼩,为100*4
2、strlen(ss)错误,strlen的参数只能是char*,且必须是以'\0'结尾的。
注:笔者试验时⽆法对ss初始化
error message:
error C2075: 'ss' : array initialization needs curly braces

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。