字符串常量的神奇使用

本文详细阐述了C语言中字符数组与字符串常量的区别,并通过实例展示了它们在表达式中的使用方法。文章还提供了一个二进制转字符的简单实现方法,以及一个神秘函数的解析,旨在帮助读者更好地掌握C语言的基本概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        最近在阅读《c和指针》这本书,对c语言的分析很不错,这是继《C++ primer》之后感觉又一部比较适合我阅读的书了,值得推荐,其中有些比较有趣的用法拿出来和大家分享。首先我们回忆关于字符数组和字符串常量的区别,比较下面两个语句:
char p[] = “hello world!”;
char* p = “hello world!”;
        第一个为字符数组的初始化,包含13个字符,注意最后有个’\0’,第二个为初始化指针变量,它指向字符串常量的存储位置。我们知道计算机的数据有三个存储区:静态存储区、栈和堆,第一个字符串存在栈区,第二个指向静态存储区。
当字符串常量出现于表达式中时,它的值是个指针常量。编译器把这些指定字符的一份拷贝存储在内存的某个位置,并存储一个指向第一个字符的指针。
下面的表达式是什么意思呢?
“xyz”+1
        当你记得字符串常量实际是个指针时,它的意义就变得清楚了,它计算指针值加1的值,它的结果是个指针,指向字符串第二个字符:y
那么这个表达式又是什么呢?
*”xyz”
        对一个指针执行间接访问操作,其结果就是指针所指向的内容。所以它的值是指向的字符:x,注意不是整个字符串。
下一个写法更奇怪,
”xyz”[2]是什么意思呢?
根据以上知识,我们可以推断出应该是z。
由此,我们把二进制转化为字符的实现可以很简单的实现:
unsigned value;
putchar(“0123456789ABCDEF”[value%16]);
思考下面的神奇函数的意义。
#include <stdio.h>
void mystery(int n)
{
n += 5;
 n /= 10;
printf(“**********”+ 10 - n);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值