C語言高階 指標的高階 1

2022-09-24 17:12:10 字數 2377 閱讀 3378

目錄

指標定義:指標變數,用於存放位址。位址唯一對應一塊記憶體空間。

指標大小:固定32位平台下佔4個位元組,64位8個位元組。

指標型別:型別決定指標整數的步長及指標解引用時訪問的大小。

指標運算:指標解引用,指標整數,指標-指標,指標關係運算。

本章節在此基礎上,對c語言階段指標進行更深層次的研究。

字元指標,存入字元的位址,型別為char *

1.指向單個字元變數

char ch = 'w';

const char* pch = &ch;

這種很容易理解,就是指標解引用訪問字元變數。

2.指向字串首字元

char* pc = "hello";

printf("%s\n", pc);

這種是把字串"hello"放進指標嘛?

其實不然,類似於陣列名,該指標存的是常量字串"hello"的首字元的位址。通過對指標解引用訪問首字元位址,從而找到整個字串。

char* pc = "hello";

printf("%c\n", *(pc + 1));//e

printf("%s\n", pc);//hello

printf("%s\n", pc + 1);//ello

字串本質上還是在空間上連續存放,所以指標整數同樣有訪問的效果。由此也可以看出%s的用法,把位址給%s會將其後的內容看作字串並列印直到\0 。(所以我猜測%s的s是string的意思)

例題charnqwdfals str1 = "hello bit";

char str2 = "hello bit";

char* str3 = "hello bit";

char* str4 = "hello bit";

if (str1 == str2)

printf("str1 = str2\n");//1

else

printf("str1 != str2\n");//2

if (str3 == str4)

printf("str3 = str4\n");//3

else

printf("str3 != str4\n");//4

str1(3)==str2(4),比較的是二者其實位置位址是否相同。(位址才是真正判斷二者是否相同的要素)

答案是2和3。因為1和2是用字串初始化陣列,3和4是指標指向常量字串。

str1和str2是普通的陣列,是在記憶體上開闢了兩塊空間不過存放了一樣的資料。

str3和str4指向常量字串,存放在記憶體的常量區,是不可被修改且具有唯一性即常量區只存放乙個。所以str3和str4指向的都是同乙個字串。

常量區的儲存特點:存放在常量區的資料不可被修改,正因為不可修改所以存乙份就夠了。後期如果需要,使用的是同一資料。(資料還是同乙個資料,只是用不同的指標維護)

小結1.常量字串不可被修改,存放在記憶體的常量區。

2.具有唯一性即常量區只存放乙個。

int arr[10];//整型陣列

char ch[5];//字元陣列程式設計客棧

float f[20];//浮點型陣列

可見,元素型別也就是陣列的「型別」。

char* pch[5];

int* parr[10];

float* pf[20];

指標陣列就是存放指標的陣列。

int arr[10];

int* arr[10];

整型陣列的陣列名arr,即首元素位址,是一級指標。

指標陣列的陣列名parr,也是首元素位址,不過其首元素為int*型別變數,所以parr就是二級指標。

int arr1 = ;

int arr2 = ;

int arr3 = ;

int* parr = ;

for (int i = 0; i < 3; i++)

printf("\n");

}//答案

1 2 3 4 5

2 3 4 5 6

3程式設計客棧 4 5 6 7

ps:parr[i] <==> *(parr+i)

*(parr[i]+j) <==> *(*(parr+i)+j) <==> (*parr+i)[j] <==> parr[i][j]

通過指標陣列訪問整型陣列的每個元素。parr[i][j]和*(*(parr+i)+j)本質上是等價的。

const char* pch = ;

for (int i = 0; i < 3; i++)

printf("\n");

}列印字串使用%s更簡單,若要使用%c,就是得到每個字串的起始位址,分別向後訪問。

從這裡也可以看出陣列和指標的關係,我願稱之為*和的愛恨情仇!

本文標題: c語言高階:指標的高階(1)

本文位址:

C語言高階指標 1

c語言的指標是c語言這門語言的精華所在,當然也是讓很多人詬病的地方。指標是什麼?有這麼一句話 對於錘子來說,一切都是釘子。那麼換句話講指標,即 對於指標來說,一切都是位址 記憶體是由乙個個記憶體單元構成的,每個記憶體單元都有自己的位址。而指標就是用來存放這些位址的。凡是可以用指標來儲存的變數,在指標...

C語言高階 指標的高階 3

目錄 實踐之中不免會碰到陣列和指標作函式引數而如何設計形參的問題。一維陣列傳參,下列接收方式是否可行呢?1.void test int arr 2.void test int arr 10 3.void test int arr int main test arr return 0 1.陣列傳引數組...

C語言 高階指標

import import myfunction.h 巨集後面不要加分號 define kimagewidth 200 define kimageheight 200 有引數的巨集 define kmax a,b a b a b 加上括號 define kmul a,b a b define and...