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;这样去操作;
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;这样去操作;
相关文章推荐
- 指针与字符串:(const)char *p2 = "lmj";定义的是一个字符串常量!符串常量,正因为是常量,所以它内部的字符是不允许修改的。
- 为下面的函数原型编写函数定义: int ascii_to_integer(char *str); 这个字符串参数必须包含一个或者多个数字,函数应该把这些数字字符转换为整数并返回这个整数。如果字符串参数
- 为函数原型编写函数定义:int my_atoi(char *str);(将一个数字字符串转换成该字符串对应的数字(包括正整数、负整数))
- 为什么 接口只用于定义类型,不应该使用常量接口 ?
- 2.4 分别定义bool,char类型的变量各一个,并依次输出它们的存储空间大小
- 类中定义一个static数据成员,为什么还要在类外定义?
- 在一个集合中存储了无序并且重复的字符串,定义一个方法,让其有序(字典顺序),而且还不能去除重复
- struts2中用OGNL表达式定义字符串常量与单个字符常量需要注意的一个小细节
- 为什么在定义符号常量时const pi=3.14 没出错 而且和const int pi=3.14时 输出pi的值是一样的 但不等于3.14
- Mysql 一个字段定义成int类型,查询时传入String,会截取字符串
- c语言 char*类型作为中间变量将许多字符串保存到一个数组的问题
- PHP 为你提供一个叫__toString() 的函数,你可以用它来返回表示对象的字符串信息,而且一旦定义它,打印命令将调用它并打印出返回的字符串。
- 我用c#写了一个测试样例,分析了int,char,datetime和varchar的日志情况而且没有考虑null和空字符串的保存,希望感兴趣的朋友能和我一起交流打造属于自己的日志分析工具
- MySQL 深入剖析 char varchar 类型,有了VARCHAR,为什么还要有CHAR?
- 为什么用const说明的常量不能用来定义一个数组的初始大小?
- 【C语言】为下面的函数原型编写函数定义: int ascii_to_integer(char *str); 这个字符串参数必须包含一个或者多个数字,函数应该把这些数字字符转换为整数并返回这个整数。
- MySQL 深入剖析 char varchar 类型,有了VARCHAR,为什么还要有CHAR?
- Golang 如何定义一个接口类型的切片,它可以用来存储混合类型的数据,又如何自定义错误信息输出,以及如何定义变参函数,还有字符串多种拼接方式
- MySQL 深入剖析 char varchar 类型,有了VARCHAR,为什么还要有CHAR?
- 在一个集合中存储了无序并且重复的字符串,定义一个方法,让其有序(字典顺序),而且还不能去除重复