C语言问题
voidfunc(charstr[100]){sizeof(str)=?}sizeof(str)=是多少?...
void func(char str[100])
{
sizeof(str) = ?
}
sizeof(str) = 是多少? 展开
{
sizeof(str) = ?
}
sizeof(str) = 是多少? 展开
15个回答
展开全部
100,因为为str这个数组分配了100个char的空间
回复caoyangkaoyan,只有里面存放了100个字符的字符串的时候长度才是101
否则就不是
回复那个匿名的,str首先是以数组名存在的,它代表着整个数组
不知道那个说经过验证的是怎么验证的
#include <stdio.h>
int main()
{
char a[100];
printf("%d",sizeof(a));
return 0;
}
通过这个程序可以得到的结果可以轻松验证
这个程序经过了TC gcc VC++6.0的调试,结果都为100
还有那个101的问题,关键在于a存放的是什么,如果是100字符的字符串那么才是长度101,如果是单个字符呢?或者里面存放的字符不够100呢?那么长度就是实际的100
回复caoyangkaoyan,只有里面存放了100个字符的字符串的时候长度才是101
否则就不是
回复那个匿名的,str首先是以数组名存在的,它代表着整个数组
不知道那个说经过验证的是怎么验证的
#include <stdio.h>
int main()
{
char a[100];
printf("%d",sizeof(a));
return 0;
}
通过这个程序可以得到的结果可以轻松验证
这个程序经过了TC gcc VC++6.0的调试,结果都为100
还有那个101的问题,关键在于a存放的是什么,如果是100字符的字符串那么才是长度101,如果是单个字符呢?或者里面存放的字符不够100呢?那么长度就是实际的100
展开全部
因为str[100]是做为形参,所以是否有定义长度就都一样,系统把他当成指针,注意是指针,也可以写成void func(char str[])或void func(char *str)
我运行了下程序
#include "stdio.h"
void func(char str[100])
{
int i;
i=sizeof(str);
printf("the lenth is %d,",i);
}
void main()
{
char str[100]="123456789";
int i;
func(str);
}
结果是2
而如果把sizeof()写在main()函数中:
void main()
{
char str[100]="123456789";
int i;
i=sizeof(str);
printf("i=%d",i);
}
结果是:100
而把数组str写在调用的函数中时:
#include "stdio.h"
void func()
{
char str[100]="123456789";
int i;
i=sizeof(str);
printf("i=%d",i);
}
void main()
{
func();
}
运行结果:i=100;
由上我可得出,
1.当把数组str定义成函数中的形参时,sizeof(str)是指针所占用的内存空间.等于2
2当把数组str定义成函数中的变量时,sizeof(str)是数组所占用的内存空间.此例为100.
我运行了下程序
#include "stdio.h"
void func(char str[100])
{
int i;
i=sizeof(str);
printf("the lenth is %d,",i);
}
void main()
{
char str[100]="123456789";
int i;
func(str);
}
结果是2
而如果把sizeof()写在main()函数中:
void main()
{
char str[100]="123456789";
int i;
i=sizeof(str);
printf("i=%d",i);
}
结果是:100
而把数组str写在调用的函数中时:
#include "stdio.h"
void func()
{
char str[100]="123456789";
int i;
i=sizeof(str);
printf("i=%d",i);
}
void main()
{
func();
}
运行结果:i=100;
由上我可得出,
1.当把数组str定义成函数中的形参时,sizeof(str)是指针所占用的内存空间.等于2
2当把数组str定义成函数中的变量时,sizeof(str)是数组所占用的内存空间.此例为100.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
5. 指针变量的sizeof
学过数据结构的你应该知道指针是一个很重要的概念,它记录了另一个对象的地址。既然是来存放地址的,那么它当然等于计算机内部地址总线的宽度。所以在32位计算机中,一个指针变量的返回值必定是4(注意结果是以字节为单位),可以预计,在将来的 64位系统中指针变量的sizeof结果为8。
char* pc = "abc";
int* pi;
string* ps;
char** ppc = &pc;
void (*pf)();// 函数指针
sizeof( pc ); // 结果为4
sizeof( pi ); // 结果为4
sizeof( ps ); // 结果为4
sizeof( ppc ); // 结果为4
sizeof( pf );// 结果为4
指针变量的sizeof值与指针所指的对象没有任何关系,正是由于所有的指针变量所占内存大小相等,所以MFC消息处理函数使用两个参数WPARAM、LPARAM就能传递各种复杂的消息结构(使用指向结构体的指针)。
=====
我猜是4吧,支持tanyuguo
学过数据结构的你应该知道指针是一个很重要的概念,它记录了另一个对象的地址。既然是来存放地址的,那么它当然等于计算机内部地址总线的宽度。所以在32位计算机中,一个指针变量的返回值必定是4(注意结果是以字节为单位),可以预计,在将来的 64位系统中指针变量的sizeof结果为8。
char* pc = "abc";
int* pi;
string* ps;
char** ppc = &pc;
void (*pf)();// 函数指针
sizeof( pc ); // 结果为4
sizeof( pi ); // 结果为4
sizeof( ps ); // 结果为4
sizeof( ppc ); // 结果为4
sizeof( pf );// 结果为4
指针变量的sizeof值与指针所指的对象没有任何关系,正是由于所有的指针变量所占内存大小相等,所以MFC消息处理函数使用两个参数WPARAM、LPARAM就能传递各种复杂的消息结构(使用指向结构体的指针)。
=====
我猜是4吧,支持tanyuguo
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
应该是和sizeof(char*)一样大,32位的编译器应该是4,就是4个字节,实际上用数组作为形式参数,实参传过来也就是个地址而已,他并不知道长度~~
和下面的语句等效void fun(char *str),并且作用并不比他多,那个100没用,只是方便自己看而已,也就是说函数你写成void func(char str[10])编译都不会错~~
和下面的语句等效void fun(char *str),并且作用并不比他多,那个100没用,只是方便自己看而已,也就是说函数你写成void func(char str[10])编译都不会错~~
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我赞成一楼的,他说的对。这是一个字符数组,里面有100个字符,每个字符的长度为1;sizeof是用来求字节长度的;不包括“\0”而strlen是求整个长度包括“\0”长度为101。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询