你正真瞭解C語言中的指標嗎

codeGoogle發表於2019-03-04

工具: Visual Studio
快捷鍵方式: www.jb51.net/softjc/1295…

C語言中,指標是我們經常見到的,一般放到基本型別後面一起表示指標的資料型別,表示一段記憶體地址

記憶體的分類:

3區

  • 程式區

    程式的二進位制檔案 eg:class, so檔案

  • 靜態儲存區
    全域性變數和靜態變數 eg: int i = 2;

  • 動態儲存區

    • 堆區(heap):用於程式動態分配 eg:Java 中的new一個物件,不連續的記憶體空間,C語言中不會被系統自動回收。不像Java中,有垃圾回收機制

    • 棧區(stack):編譯器自動分配,編譯器自動申請和釋放 2M, 方法一執行完就回收了

指標和數值之間的關係

  • 陣列:陣列就是一塊連續的記憶體空間,每個元素之間的距離跟資料的型別有關係

  • 陣列名就是陣列的首地址(即時陣列的指標)

  • 對陣列名不斷的取其地址得到的還是陣列的首地址

陣列程式碼
陣列程式碼

輸出程式碼
輸出程式碼

C語言中怎麼表示字串

  • 用指標表示
char * p = "helloworle";//表示申請一塊記憶體地址,用於儲存字串常亮的地址複製程式碼
  • 用陣列表示
    ```
    char str1[] = "HelloWorld"; // 通過字元陣列來定義字串"HelloWorld",陣列中每個儲存單元存放一個字元

har s[80]="abcd";或者char s[80]={"abcd"}; /說明:自動加字串結束標誌:\0/
char s[80]={"a","b","c","d","\0"};

複製程式碼

char *str2 = "HelloWorld"; // 通過字元指標來定義字串"HelloWorld",指標str2指向一個存放字串"HelloWorld"的連續地址單元的首地址

#define str3 "HelloWorld"; // 通過巨集定義來定義字串"HelloWorld",等價於str3="HelloWorld"


#### 陣列的初始化複製程式碼

strcpy();

#### 指標的初始化複製程式碼

malloc();


#### 結構體的定義


#### 結構體的例項化複製程式碼

struct MM{
char name[20];
int age;
} mm = {"終端研發部",20};

int _tmain(int argc, _TCHAR* argv[]){
//第一種方法初始化
MyStruct stu1 = {"終端研發部",20};
// 第二種
struct Student student2;
student2.age = 27;
student2.name = "asdfgsdf";
strcpy(stu2.clazz,"終端研發部");

printf("%s\n   %s\n  %d\n", stu1.name, student2.clazz,student2.age);

system("pause");
return 0;複製程式碼

}


報錯解決方式:複製程式碼

_CRT_SECURE_NO_DEPRECATE
```

相信自己,沒有做不到的,只有想不到的

如果你覺得此文對您有所幫助,歡迎入群 QQ交流群 :232203809
微信公眾號:終端研發部

技術+職場
技術+職場

相關文章