c语言:数组误区总结
- 创建数组时,数组的长度必须用常量表达式进行定义,较好的方法是用宏来定义数组。
1 |
|
但在C99中的变长数组,也可以使用非常量表达式。
- 关于字符数组的初始化,使用方法2初始化数组会在末尾自动创建\0。
1 | char ch1[] = { 'p','a','n','g','h','u' }; |
这就会导致打印结果、字符串长度的不同。
strlen() 函数从字符串的开头位置依次向后计数,直到遇见\0
,然后返回计时器的值。最终统计的字符串长度不包括\0
。
1 |
|
因为数组ch1没有添加终止符\0
,打印内容出现了意外,字符串长度也是一个随机数。
- 由数组中各元素的地址可知,一维数组在内存中是连续存放的,随着数组下标的增长,地址由低到高变化。(二维数组也是如此)
1 |
|
所以当我们知道数组中首元素的地址,便可以打印出所有元素。
1 |
|
- 关于arr和&arr:
1 | int arr[] = { 0,1,2,3,4 }; |
数组名是首元素的地址。
sizeof(数组名)
表示的是整个数组的大小,单位是字节。
&数组名
表示的是整个数组,取出的是整个数组的地址。
首元素地址和数组地址的值是一样的,但意义不同,可以试着输出&数组名+1
和数组名+1
,进行比较。
- 数组作为函数传参时,形参可以写成两种形式:
一是数组形式,二是指针形式。
1 | int arr[10]; |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 胖虎同学!
评论