【c和指针学习笔记】深入理解字符串常量
来源:互联网 发布:苹果6手机壳淘宝 编辑:程序博客网 时间:2024/05/01 08:56
思考下列表达式代表什么意思???
//1:“zyh_helen”+ 1//2: *“zyh_helen”//3:“zyh_helen”[2]。
如果你觉得上述表达式不了解,甚至认为他们看上去像垃圾的话,你有必要阅读本篇文章
首先对“字符串常量”这个话题进行深入的讨论:
当一个字符串常量出现在表达式中时,他的值是一个指针常量。编译器把这些指定字符的一份拷贝存储在内存中的某个位置,并存储一个指向第一个字符的指针。
你可能会联想到,当数组名用于表达式中时,他们的值也是指针常量(例如:int a[10],a++ ++a --a a--都是不合法的),但是我们可以对他们进行下标引用、间接访问以及指针运算。这些操作对于字符串常量是否也有意义呢?
答案是肯定的,如下所示:
1:“zyh_helen”+ 1 ,字符串出现在表达式中时,他的值是一个指针常量,指向字符串中的第一个字符(知道字符串常量实际是一个常量指针,该问题就迎刃而解了)-->“指针加1”,结果仍是一个指针,它指向字符串中的第2个字符。
2:*“zyh_helen”,对指针进行间接访问操作,其结果就是指针所指的内容,字符串常量的类型是“指向字符的指针”,结果即为它所指向的字符‘z’
3:“zyh_helen”[2],该表达式的值即为字符:‘h’
你可能会问起,人们什么时候会使用上面这些形式的表达式呢?下面的例子是一个很好的解释
已下程序实现:无符号十进制数转化为16进制,并且打印出来
方式一:
void int_to_hex1(unsigned int n){char array[8];int count = 0;while (n){array[count++] = n % 16;n >>= 4;}for (int i = count - 1; i >= 0; --i){if (array[i] <= 9)printf("%d", array[i]);elsecout << array[i]-10+'A';}cout << endl;}
方式二:
void int_to_hex3(unsigned int n){char array[8];//32位二进制--->8位16进制(最多需要)int count = 0;while (n){array[count++] = "0123456789ABCDEF"[n % 16];n >>= 4;}for (int i = count - 1; i >= 0; --i){cout << array[i];}cout << endl;}显然方式一得代码比较复杂,因为字母和数字在字符集中并不是相邻的,方式二定义了一个字符串,使子母和数字相邻,从而避免了这种复杂性,余数将在字符串中选择一个正确的数字。
方式二比传统的方式要快,因为它所需要的操作更少,但是,它的代码并不一定比原来的方法更小,虽然指令减少了,但它付出的代价是多了一个17个字节(‘\0’不要忽略了)的代价。
下面例子也是字符串常量的一个应用:(统计一个十进制数:二进制表示中1的个数)
int count(int num){int count = 0;while (num){count += "\0\1\1\2\1\2\2\3\1\2\2\3\2\3\3\4"[num % 16];num >>= 4;}return count;}每次取num的后四位,判断有多少个1(4位表示的数值:0--15,0到15,二进制中1的个数分别为0 1 1 2 1 2 2 3 1 2 2 3 2 3 3 4 )‘\’的作用:转移字符,将字符转化为数字
0 0
- 【c和指针学习笔记】深入理解字符串常量
- 深入理解C指针学习笔记之常量和指针(六)
- <深入理解C指针>学习笔记和总结 第五章 指针和字符串
- 《深入理解C指针》学习笔记
- <深入理解C指针>学习笔记和总结 第一章 认识C指针
- <深入理解C指针>学习笔记和总结 第二章 认识C指针
- <深入理解C指针>学习笔记和总结 第三章 指针和函数
- <深入理解C指针>学习笔记和总结 第四章 指针和数组
- <深入理解C指针>学习笔记和总结 第六章 指针和结构体
- <深入理解C指针>学习笔记和总结 第六章 指针和结构体 第二部分
- 深入理解Objective-C中字符串常量
- 《c和指针》笔记--宏插入到字符串常量
- 《c和指针》笔记--宏插入到字符串常量
- 深入理解字符串常量
- 【C Prime Plus】学习笔记,Chapter 12, 指针常量和常量指针
- 深入理解C指针学习笔记(一)
- 深入理解C指针学习笔记(二)
- 深入理解C指针学习笔记(三)
- Java核心技术第3章(6)
- Kafka深度解析
- iOS真机测试
- 黑马程序员—正则表达式+反射
- CDH5.3 Oozie服务搭建
- 【c和指针学习笔记】深入理解字符串常量
- div模拟弹出框
- python2转3格式自动工具:2to3 , 以及python3相对于python2 修改的一些内容
- 文章标题
- 【c++11并不遥远】使xcode工程支持c++11特性
- SQL Server 2008 R2 清空数据库中ldf日志文件
- PythonChallenge过关斩将录-0~10关
- maxHappiness
- 设计模式学习笔记之迪米特法则