归纳几点数组名和指针变量名的区别(由于补充了一点,所以重发帖)

小鸟悠悠 2013-01-02 08:39:44
在很多时候,对于指针变量可用数组方式操作,对于数组可用指针变量方式操作,可是指针变量和数组毕竟不是同一个东西,下面我们来归纳几点数组名和指针名的区别:
  以下的讲解基于如下这段代码:
    char a={'a','b','c'};
    int *p = a;
1、指针变量名可以被赋值,数组名不可以被赋值。也就是说:p=p+1;是正确的,a = a+1;是错误的。
2、sizeof(p)的值为4,sizeof(a)的值为12。
  求指针变量的长度详见 http://birduu.com/211.html
求数组的长度详见 http://birduu.com/220.html节。
3、对于定义的一个指针变量:char *p; 声明时写成 extern char p[n];(n=1,2,3...)的形式是不可以的;
同样,如果对于数组形式的定义:char a={'a','b','c'}; 声明时写成 extern char *a;也是不可以的; 详见 http://birduu.com/431.html。
4、指针变量指向字符串和字符串数组的区别。
字符串数组:char hi[] = "hello";它的数组元素是可以更改的。
用指针变量指向字符串:char *hi="hello"; hello在静态内存区,因为静态存储区的内容是不可以被更改的,所以类似于 *hi=某个值 等赋值语句都是不被允许的。
以上是概括,详细讲解在 birduu.com 这个网站的C语言专题上。
...全文
215 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
小鸟悠悠 2013-01-02
  • 打赏
  • 举报
回复
感谢,这个帖子手误太多,麻烦帮我删掉吧,我再重发一个,应该是这样: 在很多时候,对于指针变量可用数组方式操作,对于数组可用指针变量方式操作,可是指针变量和数组毕竟不是同一个东西,下面我们来归纳几点数组名和指针名的区别:   以下的讲解基于如下这段代码:     char a[]={'a','b','c'};     char *p = a; 1、指针变量名可以被赋值,数组名不可以被赋值。也就是说:p=p+1;是正确的,a = a+1;是错误的。 2、sizeof(p)的值为4,sizeof(a)的值为3。 3、对于定义的一个指针变量:char *p; 声明时写成 extern char p[n];(n=1,2,3...)的形式是不可以的;同样,如果对于数组形式的定义:char a[]={'a','b','c'}; 声明时写成 extern char *a;也是不可以的;详见4-3-2节。 4、指针变量指向字符串和字符串数组的区别,这个会在2-4-1节讲。
昵称很不好取 2013-01-02
  • 打赏
  • 举报
回复
char a={'a','b','c'}; —— 这么写是想声明数组还是什么? 对吗? sizeof(a)的值为12。 —— 确定sizeof(a)结果为12? 如果是总结,希望验证好结果再发出来,别误导读者,那个网站也别瞎参考,估计也不咋样
jimette 2013-01-02
  • 打赏
  • 举报
回复
赞。。。。。。。

69,379

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧