#include<iostream>
#include<string>
using namespace std;
int main()
{
char a[]="hello world";
char *p=a;
cout<<sizeof(a)<<"\n"<<sizeof(p)<<endl<<strlen(p)<<endl;
system("pause");
return 0;
}
1. sizeof(a)输出结果为12,因为字符串以'\0'结束,'\0'占一个字节。
2. sizeof(p)32位系统输出为4字节(4字节=4*8位=32位),64位系统输出为8字节(8字节=8*8位=64位),。指针只是一个存放变量地址的一个变量
3. strlen(p)输出结果为11。strlen不区分是数组还是指针,就读到\0为止返回长度。而且strlen是不把\0计入字符串的长度的。
strlen(a)的结果也是11
指针变量的sizeof
学过数据结构的你应该知道指针是一个很重要的概念,它记录了另一个对象的地址。既然是来存放地址的,那么它当然等于计算机内部地址总线的宽度。所以在32位计算机中,一个指针变量的返回值必定是4(注意结果是以字节为单位),可以预计,在64位系统中指针变量的sizeof结果为8。追问
2. sizeof(p)32位系统输出为4字节(4字节=4*8位=32位),64位系统输出为8字节(8字节=8*8位=64位),。指针只是一个存放变量地址的一个变量
3. strlen(p)输出结果为11。strlen不区分是数组还是指针,就读到\0为止返回长度。而且strlen是不把\0计入字符串的长度的。
strlen(a)的结果也是11
指针变量的sizeof
学过数据结构的你应该知道指针是一个很重要的概念,它记录了另一个对象的地址。既然是来存放地址的,那么它当然等于计算机内部地址总线的宽度。所以在32位计算机中,一个指针变量的返回值必定是4(注意结果是以字节为单位),可以预计,在64位系统中指针变量的sizeof结果为8。追问
有两个问题:
第一:sizeof(a)中的a不是数组的首地址吗?既然是地址应该也是4个字节啊?这什么情况?我记得有一种情况就是4个字节的,忘记是哪种形式了!
第二:后面的那个strlen(p)和strlen(a)是一个意思吗?有没有差别?都是计算数组的长度?
1. sizeof(*a)才是a的地址。sizeof(a)是字符串数组a的大小
2. strlen(p)和strlen(a),strlen不区分是数组还是指针,就读到\0为止返回长度。所以是一样的
*a应该是第一个元素吧,所以sizeof(*a)=1??
追答对,sizeof(*a)=1
温馨提示:答案为网友推荐,仅供参考