|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 风扫地 于 2018-11-10 17:57 编辑
测试代码:
- printf(&("0123456\n"[3]));
复制代码
1.
这两句话能编译通过吗?字符串能和整数相加吗?
如果不能是为什么?
如果能,那会输出什么?
2.
在某个函数内定义
- char* p1 = "0123456\n";
- char p2[10] = "0123456\n" ;
复制代码
p1和p2 有何异同?
震惊!!!!字符串竟然和整数发生那种事~
-------------------------------
来谈谈我的理解
1.两句话都能编译通过,且都输出"3456\n"
字符串在C语言中可以看成指向该字符串首字符的指针,所以字符指针加3得到的新指针指向'3',这一点也可以从printf的函数原型中得到验证,他的第一个参数就是指针类型的,而我们经常就传入一个字符串来使用printf;
2.p1和p2都是指针(地址),都可以使用指针的一些方法,如果一定要说有什么不同,p1是指针变量,他的指向可以改变,p2是数组名,可以当成指针常量,在p2的可见区域内,其指向是固定的,就是一个“常量"地址值,没有另外的空间来存储他的地址~
3.我们甚至可以将一个常数(比如说0x1000000)强制转换为一个指针,然后对这个指针指向的空间进行赋值,其实也就是对0x1000000这个空间赋值
*(char*)(0x1000000) = 0x65;//当然这个代码不是在所有的平台都能使用,可能涉及内存保护和内存访问权限的问题,这种方法常常在嵌入式平台上使用。
感谢大家的参与.
@无敌太刀
@llllzll
@常德水鱼村
@whdd
@余生愿你常欢笑
@wwhywhy
|
|