1.数组名相当于一个指针吗?
答: 数组名并不是指针,也不是常指针,它和一般的变量名一样都是内存地址的助记符。不过大多数情况下,当数组名用于表达式或做函数参数时会被转化为指针,指向第一个元素的指针,对于int arr[5]来说,指针的类型是 int *,对于int arr[5][6] 来说 指针的类型是 int (*)[6].
2. 关于字符串的strcat(char[],const char[])函数,为什么不把第一个字符数组声明为const?”
答: 这个是要把数组传递给子函数操作,实际上只能传递的是该数组的指针,也就是子函数的数组指针指向的内容和主函数的是同一个,在子函数里修改其内容就是更改主函数里数组的内容。
把形参设置成const,子函数就无权中修改其内容,保护了数据的安全性。答: 数组名并不是指针,也不是常指针,它和一般的变量名一样都是内存地址的助记符。不过大多数情况下,当数组名用于表达式或做函数参数时会被转化为指针,指向第一个元素的指针,对于int arr[5]来说,指针的类型是 int *,对于int arr[5][6] 来说 指针的类型是 int (*)[6].
2. 关于字符串的strcat(char[],const char[])函数,为什么不把第一个字符数组声明为const?”
答: 这个是要把数组传递给子函数操作,实际上只能传递的是该数组的指针,也就是子函数的数组指针指向的内容和主函数的是同一个,在子函数里修改其内容就是更改主函数里数组的内容。
所以在写传给子函数指针型数据时,如果不想(或不能)改变指针所指的数据,将指针的类型声明为const,即常量,这时可以防止在子函数里无意的改变其内容。但是对于简单的数据传递,由于是把数据复制到参数,子函数和主函数的数据完全不想干,就不用声明该数据是const型的。
如果第一的参数也是const的,这个函数就不能对第一个参数进行操作,从而无法实现函数的功能,即连接字符操作。
3.实参与对应形参 之间的数据传递方式是值传递还是地址传递?
答:是值传递,也就是单向传递。
未完待续
3.实参与对应形参 之间的数据传递方式是值传递还是地址传递?
答:是值传递,也就是单向传递。
未完待续