字符串與指針

字符串與指針數組

一、字符串的表示形式:函數

數組形式:spa

char string[] = 「hello world"; //棧(局部)指針

字符指針形式:blog

char *str = 「hello world"; //文字常量區內存

數組形式與字符指針形式都是字符串的表示形式,可是這兩種表示形式大不相同。字符串

下面以數字形式字符串char string[] = 「hello world"; 與指針形式字符串char *str = "hello world";爲例:編譯器

一、儲存方式:(1)字符數組由若干元素組成,每一個元素存放一個字符,(2)而字符指針變量只存放字符串的首地址,不是整個字符串。二、存儲位置:(1)數組是在內存中開闢了一段空間存放字符串;(2)而字符指針是在文字常量區開闢了一段空間存放字符串,將字符串的首地址付給指針變量str。三、賦值方式:string

對與數組,下面的賦值方式是錯誤的:編譯

char str[10];str="hello";

而對字符指針變量,能夠採用下面方法賦值:

char *a;a="hello";四、能否被修改:(1)指針變量指向的字符串內容不能被修改,但指針變量的值(即存放的地址或者指向)是能夠被修改的;

例一:指針變量指向的字符串內容不能被修改

char *p = "hello"; //字符指針指向字符串常量*p = 'a'; //錯誤,常量不能被修改,即指針變量指向的字符串內容不能被修改說明:定義一個字符指針指向字符串常量「hello」,修改指針變量指向的字符串的內容,即*p = 'a',發生錯誤,指針變量指向字符串常量,而常量字符串存在文字常量區,這段空間中的內容爲只讀內容,不能被修改,即指針變量指向的字符串內容不能被修改。

例二:指針變量的值能夠被修改

char *p = "hello"; //字符指針指向字符串常量char ch = 'a';p = &ch; //指針變量指向能夠改變說明:定義一個字符指針指向字符串常量「hello」,同時定義一個字符變量ch,改變指針變量的指向,即讓p指向字符變量ch,這樣是能夠的,即指針變量的指向是能夠改變的。(2)字符串數組內容能夠被修改,但字符串數組名所表明的字符串首地址不能被修改例子:定義了一個數組buf,編譯器在編譯時爲它分配內存單元,有肯定的地址,此例子中爲0X0034FDCC,給buf賦不一樣的值,字符串數組數組名所表明的字符串首地址沒有改變,一直爲0X0034FDCC。

五、初始化:定義了一個數組,在編譯時爲他分配內存單元,他有肯定的地址;而在定義一個字符指針變量時,最好將其初始化,不然指針變量的值會指向一個不肯定的內存段,將會破壞程序,如下方式是容許的:char str[10];scanf("%s", str); //或使用字符串拷貝函數進行拷貝賦值如下方式不推薦,是很危險的:char *p; //指針變量未初始化,指向一個不肯定的內存段scanf("%s", p);如下方式是推薦使用的:char *p = NULL;p = (char *)malloc(10);scanf("%s", p); //或使用字符串拷貝函數進行拷貝賦值

相關文章
相關標籤/搜索