char指针简单应用

 

首先看看下面的代码:

char *p;
p="abc";
你认为是对的吗?
答案:语法上是对的,但不提倡这种写法。

误区1:没有给p分配内存空间就赋值,怎么会是对的呢?
正解:不少人第一眼将这里的p="abc"看成了*p="abc",然后就做出了以上的论断。这是比较笨笨的错误。

看清楚就好啦,其实赋给p的是"abc"的地址。再说,*p="abc"也不对呀,字符串可不能这么赋值。

误区2:这"abcd"哪来的地址,怎么能直接赋给p?
正解:先自己试试吧。在2K/XP +vc下运行这段这断代码,是不会出错的,说明这段代码并无问题。猜想的话呢,就是"abcd"不知道被放在了什么地方,然后弄来了一个地址,给了p

这到底是怎么回事呢?

要知道,这两个语句和char *p="abc"是完全一样的,所以其中的道理也一样。
char *p="abc"
曾经迷惑了不少人呀。问问你:p到底是什么类型的?char *?错,const char *
也就是说,它所指向的内容是不可改变的。不过要补充的是,a的指向是可以改变的。
所以为了不再引起误会,char *p="abc这种写法是不提倡的。
既然char *p="abcd"被建议写成const char *p="abcd",那么char *p; p="abcd";也应该写成const char *p; p="abcd";

讲解:

const char *p="abc"中的"abc",在编译期间就已经处理好,要了一块内存,存起来了!

char p[]="abc"中的"abc",是在运行期间动态分配内存"abc",然后再算出地址,赋给p

指针是没有分配空间的地址而已,而数组是一种容器,占用连续的储存空间。

字符串就该知道它是一个数组!而不是指针!

真正意义上的指针只能是地址,而它在分配了连续的空间后可以作为数组来使用。

引用字符串的最佳格式是const char *指针,但char *指针是完全没错的。于情于理,也说的过去吧

posted on 2006-10-14 10:10  路吾  阅读(661)  评论(0)    收藏  举报

导航