关于字符数组长度,字符串数组长度,和字符串长度的问题 迷糊
你记住两点:
1.C风格字符串只要是使用双引号(半角)的,都会以\0结束,就是说会多出一个字符。
2.凡是数组没有指名大小的定义,全部都会以赋值号右边的初始化长度作为数组默认大小。
那么你的问题解答如下:
字符串"abcd"长度为4,是因为字符串长度指的是字符串中有效字符的个数,不包含C风格结束符\0,而字符串数组a[]="abcd"长度为5,因为这个是算的数组的长度,也就是所占用的存储空间,当然要包含\0结束符(它也要占用存储空间)。a[10]="abcd"的长度为10,因为你显示指定了字符数组的长度,。所占内存当然就是10咯,它的存储空间是连续的,也就是说,10个字符空间中,前面分别是a,b,c,d和结束符\0,后面全部都是0(被初始化了),总共有5个0,加上前面的abcd和结束符\0,一共10个,他们的存储是连续的。
a[]={'a','b','c','d'},你没有按照双引号定义,因此不算C风格字符串,只是一个字符数组。而你又没有指名大小,那么它的大小等于你初始化的长度,这里就是4,sizeof也等于4,没有结束符\0了。后面一个问题重复了,不解释!
数组长度与字符串长度有什么区别?
数组长度与字符串长度区别:结束标志不同、特点不同1、结束标志不同字符串:必须以'\0'结尾;// ‘ \0 ’ 的意义是“字符串结束符”。字符数组:可以包含多个'\0',但是如果当做字符串处理,则实际有效字符串为第一个'\0'的签名的字符串,如果当做字符数组处理,可以处理字符数组的任何一个字符,所有的字符都可以是'\0'。2、特点不同字符串在存储上类似字符数组,所以它每一位的单个元素都是可以提取的,如s=“abcdefghij”,则s[1]=“b”,s[9]="j"。而字符串的零位正是它的长度,如s[0]=10(※上述功能Ansistring没有。),这可以给我们提供很多方便,如高精度运算时每一位都可以转化为数字存入数组。字符数组是指用来存放字符数据的数组。其定义的一般形式为: char 数组名[数据长度] 。字符数组用于存放字符或字符串,字符数组中的一个元素存放一个字符,它在内存中占用一个字节。C语言中没有字符串类型,字符串是存放在字符型数组中的。扩展资料:字符数组的初始化:字符数组的初始化与数值型数组初始化没有本质区别。但它除了可以逐个给数组元素赋予字符外,也可以直接用字符串对其初始化。用字符常量逐个初始化数组。例如:char a[8]={'i','l','o','v','e','y','o','u'};把8个字符依次分别赋给c[0]~c[7]这8个元素。参考资料来源:百度百科-字符数组百度百科-字符串
C语言中计算数组长度的方法是什么
用 sizeof 可以获得数据类型或变量在内存中所占的字节数。同样,用 sizeof 也可以获得整个数组在内存中所占的字节数。因为数组中每个元素的类型都是一样的,在内存中所占的字节数都是相同的,所以总的字节数除以一个元素所占的字节数就是数组的长度。比较特别的是,比特右移(>>)运算符可以是算术(左端补最高有效位)或是逻辑(左端补0)位移。例如,将11100011右移3比特,算术右移后成为11111100,逻辑右移则为00011100。运算符的优先级从高到低大致是:单目运算符、算术运算符、关系运算符、逻辑运算符、条件运算符、赋值运算符(=)和逗号运算符。C语言特点:其一,广泛性。C语言的运算范围的大小直接决定了其优劣性。C语言中包含了34种运算符,因此运算范围要超出许多其它语言,此外其运算结果的表达形式也十分丰富。其二,简洁性。9类控制语句和32个关键字是C语言所具有的基础特性,使得其在计算机应用程序编写中具有广泛的适用性,不仅可以适用广大编程人员的操作,提高其工作效率,同时还能够支持高级编程,避免了语言切换的繁琐。
c语言中数组长度怎么设置?
定义数组时在中括号内写上代表长度的数字,定义一维数组和二维数组是一样的。注意长度是直接用数字大小来代表,而索引时是从0开始算的!例如:#includemain(){ int a[5];//定义一个长度为5的一维数组a int b[5][6];//定义一个5行6列的二维数组b}在定义数组时可以不定义长度,可以由编译器来决定,只要在定义时赋值就可以了,这时括号内可以不写数值。例如:#includemain(){ int a[] = {0,1,2,3,4};//定义一个长度为5的数组,内容为0,1,2,3,4}