字符串的大小及与指针的关系
#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;
}