字符串

C语言 码拜 8年前 (2016-04-21) 938次浏览
#include <stdio.h>
int main() {
	char str[] = "abcd";
	printf("%p\n", "a");
	printf("%p\n", "ab");
	printf("%p\n", "abc");
	printf("%p\n", "ab""c");
	printf("%d\n", *("abc" + 3));
	printf("%d\n", sizeof(str));
	return 0;
}

字符串
为什么呢?编译器会把字符串字面值替换成第一个字符存储区的地址,那“a”“ab”“abc”的地址不应该都是a的地址吗?而且它们的间隔还不一样?

解决方案

15

%p是输出地址,printf(“%p\n”, “a”);输出的是”a”这个常量字符串的地址
假如需要输出字符串的值,用%s
“a” “ab”  “abc” 是不同的常量,内存地址不相同的

10

“a”“ab”“abc”是三个不同的常量字符串,分开存储。

30

C最早设计时定义了“常量”字符串,可以在编译时做优化节省空间.
常量字符串编译时会将相同的值合并到一起。
而”a”,”ab”,”abc”显然不是相同的值

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明字符串
喜欢 (0)
[1034331897@qq.com]
分享 (0)