您的位置:首页 > 其它

c为什么定义字符串常量,而且要放入到常量区,还要用一个char *,类型定义

2014-04-01 23:40 471 查看
形如这个样子:int a,float b,char *p="12343drf";

1、a,b要放入到常量区的,这个无庸置疑;

2、那么有时候,我想定义一些状态,做为返回值给我的用户;

用enum当然是个好办法,用标准的 #define XXX ss也没有什么不可以;

用enum的情况,他只能返回定义好的数字值,这个不多说,不明白,自己去观察内存;

用宏定义,你也只能是定义在.h或者是.c内部,你如果想改变还得去重新编译、连接生成程序,重新分发给用户,麻烦;忌讳。。。

如果用一个字符串去定义这些状态,完全可以写到文本之中,用的时候,用指针去定位,加上指针移动步长,就可以了;这个方法好!

为什么,当初C的设计者要定义字符串常量,我想这也是一个解释吧;

3、既然是常量,当然要放入到常量区了;

4、那么为什么要用一个指针类型去定义呢,正如刚才所说,为了,指针有偏移的特性,可以用char *p;p++;的方法指找自己想要的东西;

那么 char *p="12343drf"; printf("$s",p);里面是什么东西呢,根本内存的结果显示,是1234drf和p的地址;这个是vc把p作为指针和常量,二重义的结果;

5、那么如果我用 printf("%s",p++);的结果是 "2343drf",如果我想要'd'这个怎么办?

用数组去格式化这个内存地址呀,数组跟指针是个差不太多的概念;

形如这样,char q[]=p;肯定是错的;用q=p吧;也是错的;怎么弄呢?p[5],就可以了;

挺有意思的;说到去格式化一个内存地址,你可能见过这样的例子, char *p=(char *)malloc(sizeof(int));

这只不过是想告诉你的操作系统,我要把char步长的指针去操作内存;而已你还可以这样

typedef struct node

{

int a,c;

char b[100];

float d;

} Node;

char *p=(char *)Node;这样去操作;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐