This question already has answers here:
Struggling to get number of chars in char* [duplicate]
(2个答案)
What does sizeof(&array) return?
(3个答案)
5年前关闭。
我尝试通过以下方式计算字符数组的长度:
不管字符串有多长,n都是常数4。鉴于我宣布数组为
输出仍然保持为4。我知道在第二种情况下,它包含结束符'\ 0',因此是输出。
我唯一不了解的是为什么我在第一种情况下获得恒定的输出。
s是一个指针。因此sizeof(s)等于系统中指针的大小。在您的系统中,指针的大小等于4。由于s [0]的类型为char,因此其大小等于1,您将获得值4。
在第二段代码中
s是一个数组。它的大小由初始化程序的大小确定。由于字符串文字“ abc”的大小等于4,因为还计算了终止零,所以数组s的大小为4。
那么字符串文字的大小等于6,相应地,数组的大小也等于6。
您可以用以下方式重写相同的代码
如果您将此代码编写为
然后,尽管字符串文字的大小等于6,但数组的大小将等于10。该数组的所有其他没有初始化程序的元素都将被零初始化。那就是数组看起来像
(2个答案)
What does sizeof(&array) return?
(3个答案)
5年前关闭。
我尝试通过以下方式计算字符数组的长度:
char *s="abcde";
int n=sizeof(s)/sizeof(s[0]);
cout<<n;
不管字符串有多长,n都是常数4。鉴于我宣布数组为
char s[]="abc";
int n=sizeof(s)/sizeof(s[0]);
cout<<n;
输出仍然保持为4。我知道在第二种情况下,它包含结束符'\ 0',因此是输出。
我唯一不了解的是为什么我在第一种情况下获得恒定的输出。
最佳答案
在此代码段中
char *s="abcde";
int n=sizeof(s)/sizeof(s[0]);
cout<<n;
s是一个指针。因此sizeof(s)等于系统中指针的大小。在您的系统中,指针的大小等于4。由于s [0]的类型为char,因此其大小等于1,您将获得值4。
在第二段代码中
char s[]="abc";
int n=sizeof(s)/sizeof(s[0]);
cout<<n;
s是一个数组。它的大小由初始化程序的大小确定。由于字符串文字“ abc”的大小等于4,因为还计算了终止零,所以数组s的大小为4。
char s[]="abcde";
int n=sizeof(s)/sizeof(s[0]);
cout<<n;
那么字符串文字的大小等于6,相应地,数组的大小也等于6。
您可以用以下方式重写相同的代码
char s[6]="abcde";
int n=sizeof(s)/sizeof(s[0]);
cout<<n;
如果您将此代码编写为
char s[10]="abcde";
int n=sizeof(s)/sizeof(s[0]);
cout<<n;
然后,尽管字符串文字的大小等于6,但数组的大小将等于10。该数组的所有其他没有初始化程序的元素都将被零初始化。那就是数组看起来像
[a][b][c][d][e]['\0']['\0']['\0']['\0']['\0']
关于c++ - char *和char []之间的区别(2),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21497857/
10-11 21:33