深度理解C指針---讀書筆記

今天沒帶記筆記的本子,今天課比較多,所以就沒帶。

不多說了,進入正題:

-------------------------------------------------------------------------華麗風格線-------------------------------------------------------------------------------------------------

                                                                        

                                                                       第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;









      

發佈了61 篇原創文章 · 獲贊 43 · 訪問量 12萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章