数组和指针、数组名作函数参数
数组和指针
声明一个数组时,编译器将根据声明所指定的元素数量为为数组保留内存空间,然后再创建数组名,它的值是一个常量,指向这段空间的起始位置。
声明一个指针变量时,编译器只为指针本身保留内存空间,它并不为任何整型值分配内存空间。而且,指针变量并未被初始化为指向任何现有的内存空间,如果它是一个自动变量,它甚至根本不会被初始化。
如:
int a[5];
int *b

此时,*a是完全合法的,但表达式*b是非法的,*b将访问内存中某个不确定的位置,或者导致程序终止,另外,b++可以通过编译,但是a++不能,因为a是常量。
作为函数参数的数组名
当一个数组名作为一个参数传递给函数时,因为数组名是一个指向数组第一个元素的指针,所以此时传递给函数的是一份指针的拷贝。
函数如果执行下标引用,实际上是对这个指针执行间接访问操作,并且通过这种间接访问,函数可以访问和修改调用程序的数组元素。
传址调用是通过传递一个指向所需元素的指针,然后在函数中对该指针执行间接访问操作实现对数据的访问。
使用数组作为形参时,函数的声明形式可以为:
int strlen(char* string); int strlen(char string[])
若函数需要知道数组元素的个数,则必须通过形参显示的传递给函数:
int strlen(int num,char string[])

                
            
        
浙公网安备 33010602011771号