sizeof判断指针长度

发布网友 发布时间:2022-04-24 04:10

我来回答

4个回答

热心网友 时间:2023-10-26 22:03

关于第一个问题
*ss表示的是一个具体的字符了,所以sizeof(*ss)是1
ss是你定义的一个数组,sizeof(ss)就是数组的具体的长度11了
如果你在定义char *p=ss,那么此时sizeof(p)就是4了,所有指针变量都是4

这里你要弄清楚是数组还是指针,ss是数组,p是指针,虽然有时数组可以当指针用,但是两者还是由区别的,例如你可以p++,但是决不可以ss++,因为编译器会抱错的.

还有看到楼上有char *s = "abcd",要注意s此时是一个指针,但它是一个常量,不要试图s指向的内容,例如*s='1',这是错误的.虽然编译时不会出错,但会发生运行错误.但你可以重新给指针赋值让指针指向新的位置,如果新指针内容可以修改的话,直接用*s进行赋值是允许的.

关于第二个问题
你使用的是位段
a占1位,所以取值范围: 0 - 1
b占2位,二进制最大表示为11,是3,取值范围: 0 - 3
c占3位,二进制最大表示为111,是7,取值范围: 0 - 7
d占4位,二进制最大表示为1111,是15 ,取值范围: 0 - 15

热心网友 时间:2023-10-26 22:03

第一个问题 sizeof(ss)ss是一个指针所以是4字节
sizeof(*ss) *ss是表示一个字符可以看成sizeof('0')

第二个问题有点晕 不清楚你问的是什么

是问为什么a,b,c,d的取值范围是0-1,0-3,0-7,0-15
还是说怎么让a,b,c,d的值为0-1.............

热心网友 时间:2023-10-26 22:04

你的sizeof(*ss)里面的*ss不是指针,正如你所说的,他代表的 是第一个字符。
例如, char *s = "abcd" ,s 代表了指针,而*s则代表了字符a

位段的声明和其他结构声明是相同的,成员名后面是一个冒号和一个整数,该整数指定该位段所占用的位的数目,故:a占一位,在二进制里,一位的取值范围在0-1之间,b占两位(00-11),c占三位(000-111)同样,d占四位,二进制的四位取值范围在0-15(0000-1111)之间.

热心网友 时间:2023-10-26 22:04

sizeof(*ss) *ss==‘0’字符 1个字节了

这里怎么就是0-1,0-3...,表示可以取值的大小

热心网友 时间:2023-10-26 22:03

关于第一个问题
*ss表示的是一个具体的字符了,所以sizeof(*ss)是1
ss是你定义的一个数组,sizeof(ss)就是数组的具体的长度11了
如果你在定义char *p=ss,那么此时sizeof(p)就是4了,所有指针变量都是4

这里你要弄清楚是数组还是指针,ss是数组,p是指针,虽然有时数组可以当指针用,但是两者还是由区别的,例如你可以p++,但是决不可以ss++,因为编译器会抱错的.

还有看到楼上有char *s = "abcd",要注意s此时是一个指针,但它是一个常量,不要试图s指向的内容,例如*s='1',这是错误的.虽然编译时不会出错,但会发生运行错误.但你可以重新给指针赋值让指针指向新的位置,如果新指针内容可以修改的话,直接用*s进行赋值是允许的.

关于第二个问题
你使用的是位段
a占1位,所以取值范围: 0 - 1
b占2位,二进制最大表示为11,是3,取值范围: 0 - 3
c占3位,二进制最大表示为111,是7,取值范围: 0 - 7
d占4位,二进制最大表示为1111,是15 ,取值范围: 0 - 15

热心网友 时间:2023-10-26 22:03

第一个问题 sizeof(ss)ss是一个指针所以是4字节
sizeof(*ss) *ss是表示一个字符可以看成sizeof('0')

第二个问题有点晕 不清楚你问的是什么

是问为什么a,b,c,d的取值范围是0-1,0-3,0-7,0-15
还是说怎么让a,b,c,d的值为0-1.............

热心网友 时间:2023-10-26 22:04

你的sizeof(*ss)里面的*ss不是指针,正如你所说的,他代表的 是第一个字符。
例如, char *s = "abcd" ,s 代表了指针,而*s则代表了字符a

位段的声明和其他结构声明是相同的,成员名后面是一个冒号和一个整数,该整数指定该位段所占用的位的数目,故:a占一位,在二进制里,一位的取值范围在0-1之间,b占两位(00-11),c占三位(000-111)同样,d占四位,二进制的四位取值范围在0-15(0000-1111)之间.

热心网友 时间:2023-10-26 22:03

关于第一个问题
*ss表示的是一个具体的字符了,所以sizeof(*ss)是1
ss是你定义的一个数组,sizeof(ss)就是数组的具体的长度11了
如果你在定义char *p=ss,那么此时sizeof(p)就是4了,所有指针变量都是4

这里你要弄清楚是数组还是指针,ss是数组,p是指针,虽然有时数组可以当指针用,但是两者还是由区别的,例如你可以p++,但是决不可以ss++,因为编译器会抱错的.

还有看到楼上有char *s = "abcd",要注意s此时是一个指针,但它是一个常量,不要试图s指向的内容,例如*s='1',这是错误的.虽然编译时不会出错,但会发生运行错误.但你可以重新给指针赋值让指针指向新的位置,如果新指针内容可以修改的话,直接用*s进行赋值是允许的.

关于第二个问题
你使用的是位段
a占1位,所以取值范围: 0 - 1
b占2位,二进制最大表示为11,是3,取值范围: 0 - 3
c占3位,二进制最大表示为111,是7,取值范围: 0 - 7
d占4位,二进制最大表示为1111,是15 ,取值范围: 0 - 15

热心网友 时间:2023-10-26 22:03

关于第一个问题
*ss表示的是一个具体的字符了,所以sizeof(*ss)是1
ss是你定义的一个数组,sizeof(ss)就是数组的具体的长度11了
如果你在定义char *p=ss,那么此时sizeof(p)就是4了,所有指针变量都是4

这里你要弄清楚是数组还是指针,ss是数组,p是指针,虽然有时数组可以当指针用,但是两者还是由区别的,例如你可以p++,但是决不可以ss++,因为编译器会抱错的.

还有看到楼上有char *s = "abcd",要注意s此时是一个指针,但它是一个常量,不要试图s指向的内容,例如*s='1',这是错误的.虽然编译时不会出错,但会发生运行错误.但你可以重新给指针赋值让指针指向新的位置,如果新指针内容可以修改的话,直接用*s进行赋值是允许的.

关于第二个问题
你使用的是位段
a占1位,所以取值范围: 0 - 1
b占2位,二进制最大表示为11,是3,取值范围: 0 - 3
c占3位,二进制最大表示为111,是7,取值范围: 0 - 7
d占4位,二进制最大表示为1111,是15 ,取值范围: 0 - 15

热心网友 时间:2023-10-26 22:03

第一个问题 sizeof(ss)ss是一个指针所以是4字节
sizeof(*ss) *ss是表示一个字符可以看成sizeof('0')

第二个问题有点晕 不清楚你问的是什么

是问为什么a,b,c,d的取值范围是0-1,0-3,0-7,0-15
还是说怎么让a,b,c,d的值为0-1.............

热心网友 时间:2023-10-26 22:04

你的sizeof(*ss)里面的*ss不是指针,正如你所说的,他代表的 是第一个字符。
例如, char *s = "abcd" ,s 代表了指针,而*s则代表了字符a

位段的声明和其他结构声明是相同的,成员名后面是一个冒号和一个整数,该整数指定该位段所占用的位的数目,故:a占一位,在二进制里,一位的取值范围在0-1之间,b占两位(00-11),c占三位(000-111)同样,d占四位,二进制的四位取值范围在0-15(0000-1111)之间.

热心网友 时间:2023-10-26 22:04

sizeof(*ss) *ss==‘0’字符 1个字节了

这里怎么就是0-1,0-3...,表示可以取值的大小

热心网友 时间:2023-10-26 22:04

sizeof(*ss) *ss==‘0’字符 1个字节了

这里怎么就是0-1,0-3...,表示可以取值的大小

热心网友 时间:2023-10-26 22:03

第一个问题 sizeof(ss)ss是一个指针所以是4字节
sizeof(*ss) *ss是表示一个字符可以看成sizeof('0')

第二个问题有点晕 不清楚你问的是什么

是问为什么a,b,c,d的取值范围是0-1,0-3,0-7,0-15
还是说怎么让a,b,c,d的值为0-1.............

热心网友 时间:2023-10-26 22:04

你的sizeof(*ss)里面的*ss不是指针,正如你所说的,他代表的 是第一个字符。
例如, char *s = "abcd" ,s 代表了指针,而*s则代表了字符a

位段的声明和其他结构声明是相同的,成员名后面是一个冒号和一个整数,该整数指定该位段所占用的位的数目,故:a占一位,在二进制里,一位的取值范围在0-1之间,b占两位(00-11),c占三位(000-111)同样,d占四位,二进制的四位取值范围在0-15(0000-1111)之间.

热心网友 时间:2023-10-26 22:04

sizeof(*ss) *ss==‘0’字符 1个字节了

这里怎么就是0-1,0-3...,表示可以取值的大小

热心网友 时间:2023-11-17 23:01

关于第一个问题
*ss表示的是一个具体的字符了,所以sizeof(*ss)是1
ss是你定义的一个数组,sizeof(ss)就是数组的具体的长度11了
如果你在定义char *p=ss,那么此时sizeof(p)就是4了,所有指针变量都是4

这里你要弄清楚是数组还是指针,ss是数组,p是指针,虽然有时数组可以当指针用,但是两者还是由区别的,例如你可以p++,但是决不可以ss++,因为编译器会抱错的.

还有看到楼上有char *s = "abcd",要注意s此时是一个指针,但它是一个常量,不要试图s指向的内容,例如*s='1',这是错误的.虽然编译时不会出错,但会发生运行错误.但你可以重新给指针赋值让指针指向新的位置,如果新指针内容可以修改的话,直接用*s进行赋值是允许的.

关于第二个问题
你使用的是位段
a占1位,所以取值范围: 0 - 1
b占2位,二进制最大表示为11,是3,取值范围: 0 - 3
c占3位,二进制最大表示为111,是7,取值范围: 0 - 7
d占4位,二进制最大表示为1111,是15 ,取值范围: 0 - 15

热心网友 时间:2023-11-17 23:01

第一个问题 sizeof(ss)ss是一个指针所以是4字节
sizeof(*ss) *ss是表示一个字符可以看成sizeof('0')

第二个问题有点晕 不清楚你问的是什么

是问为什么a,b,c,d的取值范围是0-1,0-3,0-7,0-15
还是说怎么让a,b,c,d的值为0-1.............

热心网友 时间:2023-11-17 23:02

你的sizeof(*ss)里面的*ss不是指针,正如你所说的,他代表的 是第一个字符。
例如, char *s = "abcd" ,s 代表了指针,而*s则代表了字符a

位段的声明和其他结构声明是相同的,成员名后面是一个冒号和一个整数,该整数指定该位段所占用的位的数目,故:a占一位,在二进制里,一位的取值范围在0-1之间,b占两位(00-11),c占三位(000-111)同样,d占四位,二进制的四位取值范围在0-15(0000-1111)之间.

热心网友 时间:2023-11-17 23:02

sizeof(*ss) *ss==‘0’字符 1个字节了

这里怎么就是0-1,0-3...,表示可以取值的大小

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com