指標學習的新理解一

2021-07-25 14:41:24 字數 3125 閱讀 3077

可以把指標理解為一種新資料型別,下面從七個方面來說明這種」帶*型別」的新資料型別特徵

1、寬度

1)新型別變數寬度永遠是4位元組,無論型別是什麼,無論有幾個*

2、宣告

例子

1)char* x; char型別加*的構成乙個新型別

2)short* y; short型別加*的構成乙個新型別

3)student* st; 結構體型別加*的構成乙個新型別

4)char*** x; char型別加***的構成乙個新型別

總結

1)新資料型別的標準寫法,變數型別* 變數名

2)任何型別都可以帶*構成是一種新的資料型別

3)*可以是任意多個

3、賦值

例子

1)整型賦值

int x;

x=(int)10; 完整寫法

x=10; 簡化寫法

2)帶*型別賦值

char* x;

short* y;

int* z;

char******* h;

x = (char*)1;

y = (short*)2;

z = (int *)3;

h = (char*******)4;

總結

1)帶*型別的變數賦值時只能使用」完整寫法」

4、加加 減減

例子

1)

char* a;

short* b;

int* c;

a = (char*)100;

b = (short*)100;

c = (int*)100;

a++;

b++;

c++;

//101 102 104

printf("%d %d %d", a, b, c);

2) char*** a;

short*** b;

int*** c;

a = (char***)100;

b = (short***)100;

c = (int***)100;

a++;

b++;

c++;

//104 104 104

printf("%d %d %d", a, b, c);

總結

1)帶*型別的變數可以加加 或減減

2)帶*型別的變數做加加 或減減時,

新資料型別變數加加 = 新資料型別變數 + (去掉乙個*後型別的寬度)

新資料型別變數減減= 新資料型別變數 - (去掉乙個*後型別的寬度)

5、加上/減去 乙個整數

例子

1)

char* a;

short* b;

int* c;

a = (char*)100;

b = (short*)100;

c = (int*)100;

a = a + 5;

b = b + 5;

c = c + 5;

//105 110 120

printf("%d %d %d", a, b, c);

2)

char*** a;

short*** b;

int*** c;

a = (char***)100;

b = (short***)100;

c = (int***)100;

a = a + 5;

b = b + 5;

c = c + 5;

//120 120 120

printf("%d %d %d", a, b, c);

3) char* a;

short* b;

int* c;

a = (char*)100;

b = (short*)100;

c = (int*)100;

a = a - 5;

b = b - 5;

c = c - 5;

//95 90 80

printf("%d %d %d", a, b, c);

4) char*** a;

short*** b;

int*** c;

a = (char***)100;

b = (short***)100;

c = (int***)100;

a = a - 5;

b = b - 5;

c = c - 5;

//80 80 80

printf("%d %d %d", a, b, c);

總結

1)帶*型別的變數可以加、減乙個整數,但是不能乘或除

2)帶*型別的變數與其他整數相加或相減時,

新資料型別變數 + n = 新資料型別變數 + n乘以去掉乙個*後型別的寬度

新資料型別變數 - n = 新資料型別變數 - n乘以去掉乙個*後型別的寬度

6、求差值

例子

1)

char* a;

char* b;

a = (char*) 100;

b = (char*) 200;

int x = b - a;

//x = 100;

printf("%d\n", x);

2) char** a;

char** b;

a = (char**) 100;

b = (char**) 200;

int x = b - a;

//x = 25;

printf("%d\n", x);

總結

1)兩個型別完全相同的帶*型別的變數可以進行減法操作

2)相減的結果要除以去掉乙個*的資料的寬度

7、比較

例子

1)

char*** a;

char*** b;

a = (char***)200;

b = (char***)100;

if(a>b)

else

總結

1)帶*的變數,如果型別完全相同,可以做大小的比較

C 指標的學習理解

指標是乙個記憶體位址,而位址是整數,但指標不是整數。指標變數一般沒有 除非是指向指標的指標。指標變數前的操作符 生成它所指向的變數。指標變數的值是指標所指向變數的記憶體位址 和 指標變數 的記憶體位址相同 指標變數 的值就是指標所指向變數的值,通過改變 指標變數 的值可以操作所指向變數的值。如果把乙...

對於指標學習的理解

在最近的一段時間裡,我c語言的學習也即將接近尾聲,在這裡我想對指標的學習寫下自己的一點看法和理解,不夠全面也不是完全正確,但我希望這作為我對這段時間學習的一次總結。指標的概述 指標是一種變數型別,它與普通變數不同的是,指標裡存的是位址,指向另一變數,起到索引的作用。我所理解的指標具備三要素 1.指標...

陣列,指標陣列,陣列指標的學習理解

本文將以如下定義的陣列及指標為例,對陣列,指標陣列,陣列指標進行說明。這是看完書後總結的,所謂好記性,不然爛部落格,想將這些總結記下,以便需要時進行重溫。如有理解上的錯誤,望大家指出。int a 3 3 int p0 3 int p1 4 int p3 int p4 1 二維陣列 a 二維陣列名 a...