数组与指针本来就是两种不同的类型,它们有很多不同之处,不能混淆。但是在实际运用中,有时却可以看作相同的。具体它们有哪里联系呢?先写一点内容,以后再完善。
数组名和指针
实际上,数组名就是一个地址,它是一个不可修改的左值。出于对效率的考虑,传递给函数的数组参数会转化为指针。这个指针指向该数组第一个元素。注意,首先,该指针的地址并不等同于数组名的地址;其次,该规则并不是递归的。例如,数组的数组会被改写为数组的指针,而不是指针的指针。
1. 表达式中的数组名(与声明不同)被编译器当作一个指向该数组第一个元素的指针。
2. 在函数的参数声明中,数组名被编译器当作指向该数组第一个元素的指针。
3. 数组名取地址得到的是指向数组的一个指针,它和表达式中数组名取得的地址不是一个类型,数组名得到的地址是指向数组元素的指针。它们的类型不同。
4. 用sizeof数组名得到的是整个数组的大小,而sizeof 指针这是指针的大小。但应当注意,前面的数组名并不是函数中被当做参数传入的数组名,当做参数传入函数后,数组名被转化为指针,sizeof后大小是指针的大小。同样的情况,被转化为指针后,数组名可以被修改。
5. 直接输出数组名,如果是字符数组,就输出字符数组的内容;如果是其他的数组,则输出地址。这一点和指针很像。但是,如果用字符串常量初始化字符数组和指针,它们的底层机制是不同的。初始化指针时所创建的字符常量被定义为只读,不能修改它的值,但用字符串常量初始化的数组可以修改。