今天自己尝试写了一个小程序,但是运行时发生错误,就简单的回顾了一下C语言中的数组名和指针。
相同点:
他们都具有指针值,都可以通过下标引用和间接访问操作。
不同点:
声明一个数组的时候,编译器先根据指定的元素的数量分配内存空间容纳数组元素,在创建数组名,注意数组名是一个指针常量。
这两种声明只有当他们是函数的形参的时候才是相等的。
声明一个指针的时候,编译器为指针本身分配一个内存空间用于存储指针值。
下面是这个小程序修改之后的正确的版本以及部分注释。
#include<stdio.h>
int main(int argc, char const *argv[]) {
char str[] = "sdfdsgfd";//此处不能够使用指针
char *pstr = str;
while ( *pstr ) {//也可以使用 *pstr != '\0'
printf("%s\n", pstr++ );
//str++;数组名为常量指针,不能使用str++
}
return 0;
}
有关指针和数组的详细介绍:http://blog.csdn.net/loveyou426/article/details/7901177
《C和指针》中的一道练习题,说明对数组名和指针执行下标引用操作的不同效果:http://blog.csdn.net/wdkirchhoff/article/details/40989321