關於指標字串和陣列字串的一些經驗

2021-07-22 13:44:48 字數 1737 閱讀 7876

經驗:1.如果用ap和bp的話,是無法引用的,因為它不是指向乙個常量的。

2.如果用ap1和bp1的話,可以引用,但是交換的其實是

位址,因為常量區是無法被修改的。

3.而如果把函式改為

字元的引用,就是交換的是內容。

想想這是為什麼?上面的為什麼指向的是常量區?

二、為了解決這個疑問,我們來看看實質的差別:

int main()

;char b[9] = ;

char *c = "i like c";

//執行到這裡我們來看看位址截圖1

strcpy_s(a, strlen("hello") + 1, "hello");

strcpy_s(b, strlen("hello") + 1, "hello");

//strcpy_s(c,strlen("hello") + 1, "hello");//這樣不行哦

c = "hello";//這樣為什麼可以?

//執行到這裡我們來看看位址截圖2

位址2:

看看實際位址和變數型別,有什麼不同,那麼現在明白了嗎?

某個常量

的。最後看看位址的範圍,是不是有些差別?

三、我們再來看看這幾種

位址2:

看圖後面的解釋,發現記憶體分為很多區域了,最後我來解釋下原因,

計算機在記憶體中分為以下區域:

1.棧區(函式引數值、區域性變數):

程式執行時由編譯器自動分配,存放函式的引數值,區域性變數的值等。其操作方式類似於資料結構中的棧,程式結束時編譯器自動釋放。

2.堆區(動態分配的):

在記憶體開闢另一塊儲存區域,一般由程式設計師分配、釋放。若未被釋放,則在程式結束時系統**。注意它與資料結構中的堆是兩回事,類似於鍊錶。

3.靜態區(全域性變數和靜態變數):

編譯器編譯時即分配空間,全域性變數和靜態變數的儲存是放在一起的。

4.文字常量區(常量字串)

常量字串儲存的地方。

5.程式**區(函式體的二進位制**)

存放函式體的二進位制**。

上面的記憶體概念很重要哦,對你以後的程式構思是很有幫助的,希望大家都記一下啦!

好了,朋友們,今天的知識學到了嗎?我們下次再會!

指標字串和陣列指標

指標是c語言的精髓,只有掌握好指標才算是真正學會了c語言,以下就是學習指標的例子 include main int n 5 sort name,n print name,n if strcmp1 name 0 name 1 0 printf s,s n name 0 name 1 if strcmp...

字串,字串陣列,字串指標!!

字串 字元陣列實際上是一系列字元的集合,也就是 字串 string 字串陣列 在c語言中,沒有專門的字串變數,沒有string型別,通常就用乙個字元陣列來存放乙個字串。c語言規定,可以將字串直接賦值給字元陣列 在c語言中,字串總是以 0 作為串的結束符。上面的兩個字串,編譯器已經在末尾自動新增了 0...

指標指向字串和陣列儲存字串區別

include void main 定義了乙個指向字串的指標,str是在棧上分配的變數,儲存的位址對應的是在常量區中分配的空間。aafg 是儲存在常量區裡面,是不能改變的。char str 其實存在一種 const char 型別的隱式轉換,而strcpy要做的改變常量,所以程式編譯的時候沒錯,執行...