今天没带记笔记的本子,今天课比较多,所以就没带。
不多说了,进入正题:
-------------------------------------------------------------------------华丽风格线-------------------------------------------------------------------------------------------------
第5章指针和字符串
-------------------------------------------------------------------------华丽风格线-------------------------------------------------------------------------------------------------
(1)字符串通常是以字符指针的形式传给函数和从函数返回。这样我们就可以对字符串操作了,,还有一种方式传递字符串,就是我们可以用字符串常量的指针传递字符串,
它的好处是不能修改其内容。
(2)字符串是以ASCII 字符NUL结尾的字符序列。ASCII字符NUL表示为\0.
NULL和NUL是不同的:
NULL用来表示特殊的指针,通常定义为((void *)0)
NUL是个char,定义为\0.
字符串字面量是用双引号引起来的字符序列。位于字符串字面量池中。其内存在程序栈外,分配在只读内存中,是不可变的。它的定义可以在内存任何地方没有作用域,static,局部和全局变量都无所谓。(GCC中可以修改其内容,但是C标准是禁止修改的)
字符常量是用单引号引起来的字符序列。
(3)字符串初始化
初始化数组:
1,char p[]="sssssssssssss";或者是
2,char h[20]; strcpy(h,"sssssssssssssssssss");
还有个是做个for一个一个的录入;
初始化指针:
首先malloc一块内存空间字符串长度+1的长度;
char *p=(char *)malloc(strlen("ssssss")+1);
strcpy(h,"ssssss");
不要用sizeof操作符它会返回数组和指针的长度,而不是字符串的长度
strlen(char*)函数求的是字符串的实际长度,它求得方法是从开始到遇到第一个'\0',如果你只定义没有给它赋初值,这个结果是不定的,它会从aa首地址一直找下去,直到遇到'\0'停止。而sizeof()函数返回的是变量声明后所占的内存数,不是实际长度。
#include<stdio.h>
#include<stdlib.h>
void main()
{
char p[10];
int a;
a=strlen(p);
printf("%d",sizeof(p));
printf("%d",a);//error
printf("%d",sizeof("aassss"));
}
.C文件中
在C中sizeof('A')的大小为4
字符常量在C中的类型是int类型的
.cpp中为1;
char *p=‘sss’;
试图用字符字量面来初始化化char指针是不行的,因为它是int类型的不能转向char;