C語言學習之:指標與字串

暖仔會飛發表於2020-12-22

1. 字串的定義

  • 使用指標和陣列兩種方式定義字串

    #include<stdio.h>
    
    void main() {
    char string[] = "i love china!";
    
    char* string_ = "i love china!";
    
    printf("%s\n", string);
    printf("%s", string_);
    }
    
    
  • 從彙編的角度來看這兩種定義方式的區別
    在這裡插入圖片描述

    • 使用指標來定義字串效率更高
    • 指標定義的字串在記憶體中開闢的空間位於 常量儲存區,不能被改變和重寫
    • 陣列定義的字串在記憶體中開闢的空間位於自由儲存區,可以被改變和重寫

2. 兩種定義方式的區別

  • 我們都知道,多快好省的東西只是理想的,因此字串的定義也是一樣,指標的方式很簡單,但是它存在一個問題,就是其空間直接被分配在記憶體的常量區,因此用指標定義的字串是不可以被重寫的。我們看下面的例子:

    • 【用陣列定義的字串】
      在這裡插入圖片描述【用指標定義的字串】
      在這裡插入圖片描述
  • 驗證了結論即:陣列定義的字串,其中的內容都可以被修改,但是使用指標定義的字串其整體被看做一個常量,其中的每一個字元不可以被單獨修改。

  • 更加簡單的寫法:

    #include<stdio.h>
    
    void reWriteArray(char*raw_array,char*rewritted_array) {
    	printf("未更改之前的字串是:%s\n", rewritted_array);
    	char* p=rewritted_array;
    	while ((*rewritted_array++ = *raw_array++)!='\0')
    	{
    		;
    	}
    	printf("更改過後的字串是:%s", p);
    }
    
    void main() {
    
    	char* string = "i am a teacher";
    	char* string1 = "she is a teacher";
    	char string2[] = "she is a teacher";
    
    	reWriteArray(string, string2);
    
    }
    

3. 題外話 – python 的字串比較

在這裡插入圖片描述

  • python 中的字串中的內容也是不可修改的,大家有興趣可以將 C 語言中的一些現象和 python 以及其他語言進行比較,很有趣

相關文章