转自网上一篇文章。
数组与指针的关系:
数组不是指针,但是在一些地方可以起到指针的作用,数组名本身是一个指针常量,它不能被修改,但是数组名作为参数传递的时候,它就落为了一个普通的指针,注意多使用操作符sizeof()来测试一定的代码。
1.数组名不是指针
从下面的DEMO中可以看得出来:
/************************************************************************/
/*
** Filename: array_and_pointer.c
** Description: test array and pointer
** Note:*/
/************************************************************************/
#include <stdio.h>
#include <conio.h>
int main(void)
{
char str[10];
char *pstr;
printf("char str[10] length is %d\n",sizeof(str)); //10
printf("*pstr length is %d \n",sizeof(pstr)); //4
getch();
return 0;
}
2.数组名的本质
a.数组名的内涵在于其指代实体是一种数据结构,这种数据结构就是数组;
b.数组名的外涵在于其可以转换为指向其指代实体的指针,而且是一个指针常量,不能被修改,像str++这样;
c.指向数组的指针则是另外一种变量类型(WIN32平台下,长度为4),仅仅意味着数组的存放地址。
d.数组名作为函数形参时,在函数体内,其失去了本身的内涵,仅仅只是一个指针;
e.在失去其内涵的同时,它还失去了其常量特性,可以作自增、自减等操作,可以被修改。
void testArray(char str[])
{
printf("Parameter char str[] length is %d\n",sizeof(str)); //4
}