今天沒帶記筆記的本子,今天課比較多,所以就沒帶。
不多說了,進入正題:
-------------------------------------------------------------------------華麗風格線-------------------------------------------------------------------------------------------------
第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;