定义字符串的两种形式 :
char str1[20] = {"helloworld"};
char *sp = "helloworld";
两者区别:
str1 是数组 在栈上开辟20个空间 前面存放helloworld 后面放0 其内容可以被改变
*sp指针存放在栈上 其指向的字符串在数据区 只读特性
char str[30];//定义一个数组=>缓冲区
scanf("%s",str);
printf("%s \n",str);
gets(str);//返回的是输入的字符串是指针
//gets 做到了与字符串类型的无缝连接
int len = strlen(gets(str));//
strcopy(str,gets(str));//
str = gets(str);//不可以编译通过 因str是字符串首元素的地址
char *p = gets(str);
puts(str);
scanf 函数 以回车作为输入结束 但字符串以空格作为结束
gets 函数 以回车作为输入结束 字符串也以回车作为结束
字符串遇 ‘\0’ 就结束
缓冲区=>连续的空间
就绪态 (得不到CPU)–>运行态(未获得资源)–>IO阻碍态(得到资源后)–>就绪态
就绪态 -->运行态–>睡眠态–>就绪态
结束态(执行完毕)[任何一个进程都可以到达结束态]
时间片到达之后又回到了就绪态 防止同一个进程 一直霸占CPU
程序并发执行 <== 进程的交替执行 (微观)[由操作系统内核完成切换动作]切换速度与硬件有关 进程同时执行(宏观)
char识别低位 :
char ch = '23'; //0x3233 char 取低位识别==>ch = '3'
char ch = '\23'; // 023==>19 \255 (最大值) 超过255则在某些编译器上会报错
转义 ’ \ ’ 只能转换一个字节 8比特
转义麻烦:
(1)转化成控制意义// \t \n
(2)转化成自身意义// ' " /
int a = "\1\2\3\4\5\6\7"[2] // 3
无类型void 不可以定义变量 也不可以参与任何运算
函数形参 可以定义为 指针 引用 或变量
assert(p!=NULL&&s!=NULL)
//不返回任何类型 断言对其返回值强转为无类型 不可以相互赋值 不可以进行与或非运算
无类型指针(泛型指针)不可以解引用 // printf("%d \n" , sizeof(*p));
但是可以指向任意类型的地址
void *p = NULL;
p = ∫
P = &float;
p = &p;//也可以指向自己
void 指针不可以自加一 : 无类型不知道自己是几字节
void指针 如果要赋给其他类型 必须要强转