字符串的大小及与指针的关系

字符串的大小及与指针的关系

#include "stdafx.h"

//常见的常量 1 1.0 存储在代码段

//常见的字符串,存储在数据段中的只读数据段(RO read only)

int _tmain(int argc, _TCHAR* argv[])
{
	int a = 1; //sizeof(a); sizeof(int); sizeof(1);

	printf("%d\n", sizeof("hello"));  
	//大小为6 因为字符串中有 'h' 'e' 'l' 'l' 'o' '\0' 6个 
	//最后的字符'\0',我们称为字符串结束字符,是系统对双引
	//号引起的字符串自动加设的,而非手动干预的
	                                  
	printf("%s\n", "hello world");   //输出 hello world

	char* p = "hello world"; 
	//编译器将 hello world 编译成一个指针 指向这段只读字符串
	//"hello world" 存储到只读数据段 p为此段的首地址
	printf("p=%p, \"hello world\"=%p\n", p, "hello world"); // \为转移字符

	printf("%s\n", p); //打印整个字符串 就是以%s的形式打印指针地址
	printf("%c\n", *p);//相当于打印字符串第一个字符,因为指针p的位置就是'h'的位置
	//而且*p只是代表字符串中的第一个字符,所以不能用printf("%s",*p)来打印整个字符串

	printf("%c\n", p[0]);  //%c 打印第一个字符 h
	printf("%p\n", &p[0]);
	//"hello world" 等价于p
	printf("%c\n", "hello world"[0]); 
	printf("%p\n", &"hello world"[0]);

	//p[0]='a';  系统会崩溃 因为是只读数据 不能修改
	return 0;
}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值