99久久全国免费观看_国产一区二区三区四区五区VM_久久www人成免费看片中文_国产高清在线a视频大全_深夜福利www_日韩一级成人av

  • 回復
  • 收藏
  • 點贊
  • 分享
  • 發(fā)新帖

C++指針學習和記錄

一直因為C++指針燒腦,所以一直可以逃避這c++,但時最近有空并且感覺學習很多C++有點繞不過去,所以抱著最少能看懂程序的要求來學習C++,基本知識跟別的語言大同小異,但是指針確實看的一知半解,所以記錄一下提高自己,順便幫助需要的人。

   指針是一個變量,其值為另一個變量的地址,即內存位置的直接地址。就像其他變量或常量一樣,您必須在使用指針存儲其他變量地址之前,對其進行聲明。指針變量聲明的一般形式為:

type *var-name;

type 是指針的基類型,它必須是一個有效的 C++ 數據類型,var-name 是指針變量的名稱,星號是用來指定一個變量是指針,通過 * 來返回位于操作數所指定地址的變量的值。使用連字號(&)運算符加上指針變量來訪問內存地址。以下是有效的指針聲明:

int    *ip;    /* 一個整型的指針 */
double *dp;    /* 一個 double 型的指針 */
float  *fp;    /* 一個浮點型的指針 */
char   *ch;    /* 一個字符型的指針 */

所有指針的值的實際數據類型,不管是整型、浮點型、字符型,還是其他的數據類型,都是一樣的,都是一個代表內存地址的長的十六進制數。不同數據類型的指針之間唯一的不同是,指針所指向的變量或常量的數據類型不同。

使用指針時操作步驟:定義一個指針變量、把變量地址賦值給指針、訪問指針變量中可用地址的值。

實例如下:

#include <iostream>
 
using namespace std;
 
int main ()
{
   int  var = 20;   // 實際變量的聲明
   int  *ip;        // 指針變量的聲明
   ip = &var;       // 在指針變量中存儲 var 的地址
 
   cout << "Value of var variable: ";
   cout << var << endl;
 
   // 輸出在指針變量中存儲的地址
   cout << "Address stored in ip variable: ";
   cout << ip << endl;
 
   // 訪問指針中地址的值
   cout << "Value of *ip variable: ";
   cout << *ip << endl;
 
   return 0;
}

當上面的代碼被編譯和執(zhí)行時,它會產生下列結果:

Value of var variable: 20
Address stored in ip variable: 0xbfc601ac
Value of *ip variable: 20

指針運算:

指針是一個用數值表示的地址。因此,您可以對指針執(zhí)行算術運算。可以對指針進行四種算術運算:++、--、+、-。

假設 ptr 是一個指向地址 1000 的整型指針,是一個 32 位的整數,讓我們對該指針執(zhí)行下列的算術運算:

ptr++

在執(zhí)行完上述的運算之后,ptr 將指向位置 1004,因為 ptr 每增加一次,它都將指向下一個整數位置,即當前位置往后移 4 個字節(jié)。這個運算會在不影響內存位置中實際值的情況下,移動指針到下一個內存位置。如果 ptr 指向一個地址為 1000 的字符,上面的運算會導致指針指向位置 1001,因為下一個字符位置是在 1001。

我們喜歡在程序中使用指針代替數組,因為變量指針可以遞增,而數組不能遞增,因為數組是一個常量指針。下面的程序遞增變量指針,以便順序訪問數組中的每一個元素:

實例如下:

#include <iostream>
 
using namespace std;
const int MAX = 3;
 
int main ()
{
   int  var[MAX] = {10, 100, 200};
   int  *ptr;
 
   // 指針中的數組地址
   ptr = var;
   for (int i = 0; i < MAX; i++)
   {
      cout << "Address of var[" << i << "] = ";
      cout << ptr << endl;
 
      cout << "Value of var[" << i << "] = ";
      cout << *ptr << endl;
 
      // 移動到下一個位置
      ptr++;
   }
   return 0;
}

當上面的代碼被編譯和執(zhí)行時,它會產生下列結果:

Address of var[0] = 0xbfa088b0
Value of var[0] = 10
Address of var[1] = 0xbfa088b4
Value of var[1] = 100
Address of var[2] = 0xbfa088b8
Value of var[2] = 200

遞減指針如下:
#include <iostream>
 
using namespace std;
const int MAX = 3;
 
int main ()
{
   int  var[MAX] = {10, 100, 200};
   int  *ptr;
 
   // 指針中最后一個元素的地址
   ptr = &var[MAX-1];
   for (int i = MAX; i > 0; i--)
   {
      cout << "Address of var[" << i << "] = ";
      cout << ptr << endl;
 
      cout << "Value of var[" << i << "] = ";
      cout << *ptr << endl;
 
      // 移動到下一個位置
      ptr--;
   }
   return 0;
}
當上面的代碼被編譯和執(zhí)行時,它會產生下列結果:

Address of var[3] = 0xbfdb70f8
Value of var[3] = 200
Address of var[2] = 0xbfdb70f4
Value of var[2] = 100
Address of var[1] = 0xbfdb70f0
Value of var[1] = 10

指針數組:

指針和數組是密切相關的。事實上,指針和數組在很多情況下是可以互換的。例如,一個指向數組開頭的指針,可以通過使用指針的算術運算或數組索引來訪問數組

而指針數組,我們讓數組存儲指向 int 或 char 或其他數據類型的指針,聲明如下:

int *ptr[MAX];

在這里,把 ptr 聲明為一個數組,由 MAX 個整數指針組成。因此,ptr 中的每個元素,都是一個指向 int 值的指針。下面的實例用到了三個整數,它們將存儲在一個指針數組中,如下所示

#include <iostream>
 
using namespace std;
const int MAX = 3;
 
int main ()
{
   int  var[MAX] = {10, 100, 200};
   int *ptr[MAX];
 
   for (int i = 0; i < MAX; i++)
   {
      ptr[i] = &var[i]; // 賦值為整數的地址
   }
   for (int i = 0; i < MAX; i++)
   {
      cout << "Value of var[" << i << "] = ";
      cout << *ptr[i] << endl;
   }
   return 0;
}
當上面的代碼被編譯和執(zhí)行時,它會產生下列結果:

Value of var[0] = 10
Value of var[1] = 100
Value of var[2] = 200

也可以用一個指向字符的指針數組來存儲一個字符串列表,如下:

#include <iostream>
 
using namespace std;
const int MAX = 4;
 
int main ()
{
 const char *names[MAX] = {
                   "Zara Ali",
                   "Hina Ali",
                   "Nuha Ali",
                   "Sara Ali",
   };
 
   for (int i = 0; i < MAX; i++)
   {
      cout << "Value of names[" << i << "] = ";
      cout << names[i] << endl;
   }
   return 0;
}
當上面的代碼被編譯和執(zhí)行時,它會產生下列結果:

Value of names[0] = Zara Ali
Value of names[1] = Hina Ali
Value of names[2] = Nuha Ali
Value of names[3] = Sara Ali

覺得重要的知識點,暫時就總結到這些,倒數第二個實例不知道是不是有更好更簡便的方法,還是最后一個實例中什么時候需要const (調試時發(fā)現(xiàn)沒有const就會報錯)。歡迎大家評論區(qū)留言和交流

全部回復(44)
正序查看
倒序查看
2021-12-20 12:28

語法跟C語言差不多,有空補習一下

0
回復
米修兒
LV.4
3
2021-12-22 08:52
@lihui710884923
語法跟C語言差不多,有空補習一下

是的,不過無論是C還是C++,指針是精髓,也是難點

0
回復
2021-12-22 14:59

指針真的是燒腦,看了很久還是不能完全掌握,只能項目中慢慢熟悉了

0
回復
2021-12-22 14:59

文章寫的很通俗易懂,么事就過來溫習一遍,先收藏了

0
回復
米修兒
LV.4
6
2021-12-23 09:19
@dy-q1PtffAR
指針真的是燒腦,看了很久還是不能完全掌握,只能項目中慢慢熟悉了

是的,指針一直是我想逃避的語法,沒辦法了才來學習,所以記錄下來,隨時過來復習

0
回復
2021-12-23 09:42

在程序中使用指針代替數組,因為變量指針可以遞增,而數組不能遞增,確實指針會方便點。

0
回復
2021-12-23 09:46

語法上跟C語言大同小異,不過新的標準更新了不少

0
回復
米修兒
LV.4
9
2021-12-23 09:47
@米修兒
是的,不過無論是C還是C++,指針是精髓,也是難點

是的,有C基礎的話,學習起來就容易很多

0
回復
米修兒
LV.4
10
2021-12-23 09:48
@星球居民-sCcAfEGY
語法上跟C語言大同小異,不過新的標準更新了不少

嗯,新標準更人性化點

0
回復
2021-12-23 10:00

一些底層代碼用C++運行效率確實提高不少,偶爾混合編程還是需要的

0
回復
dy-SLPHrVRz
LV.1
12
2021-12-23 15:29

看過C++一直沒學好指針,文章寫的通俗易懂,收藏了

0
回復
dy-SLPHrVRz
LV.1
13
2021-12-23 15:30

寫的很詳盡,遇到問題了過來一起討論

0
回復
2021-12-23 15:50

燒腦的指針,不過文章講的很直白,很是受用

0
回復
2021-12-23 15:56

指針很麻煩,但是熟練之后很少方便快捷,比數組要方便不少

0
回復
米修兒
LV.4
16
2021-12-23 16:02
@星球居民-6wBTmHfM
指針很麻煩,但是熟練之后很少方便快捷,比數組要方便不少

確實是,熟練了比數組用起來還要方便

0
回復
米修兒
LV.4
17
2021-12-23 16:03
@dy-SLPHrVRz
寫的很詳盡,遇到問題了過來一起討論

歡迎有問題來評論,一起探討學習

0
回復
米修兒
LV.4
18
2021-12-23 16:15
@星球居民-sCcAfEGY
一些底層代碼用C++運行效率確實提高不少,偶爾混合編程還是需要的

C++勝在執(zhí)行效率,學習起來還是C#快

0
回復
米修兒
LV.4
19
2021-12-23 16:18
@dy-q1PtffAR
指針真的是燒腦,看了很久還是不能完全掌握,只能項目中慢慢熟悉了

項目實踐是最好的學習方式

0
回復
#回復內容已被刪除#
20
#回復內容已被刪除#
21
#回復內容已被刪除#
22
#回復內容已被刪除#
23
#回復內容已被刪除#
24
dy-NCJU4yct
LV.1
25
2021-12-27 09:15

指針上大學的時候沒學好,借著這個文章順便溫習回顧一下

0
回復
dy-NCJU4yct
LV.1
26
2021-12-27 09:16

聽說指針很強大,但是一直學的半生不熟的,有空好好學習一下

0
回復
米修兒
LV.4
27
2021-12-27 10:41
@星球居民-sCcAfEGY
在程序中使用指針代替數組,因為變量指針可以遞增,而數組不能遞增,確實指針會方便點。

是的,所以很多高手更喜歡用指針而不用數組

0
回復
米修兒
LV.4
28
2021-12-27 14:19
@dy-NCJU4yct
指針上大學的時候沒學好,借著這個文章順便溫習回顧一下

上大學的時候C都學過,可是都還給老師了,大學是最好的學習時間

0
回復
米修兒
LV.4
29
2021-12-27 14:20
@dy-NCJU4yct
聽說指針很強大,但是一直學的半生不熟的,有空好好學習一下

學習c++的話指針是真的強大和方便

0
回復
2021-12-27 14:21

不錯不錯,溫故而知新啊

0
回復
米修兒
LV.4
31
2021-12-27 14:21
@dy-NCJU4yct
指針上大學的時候沒學好,借著這個文章順便溫習回顧一下

上學是最好的學習時間,但是上學的時候不懂得珍惜

0
回復
發(fā)
主站蜘蛛池模板: 99国产观看免费视频 | 又黄又粗暴的120秒免费GIF视频 | 玩弄人妻奶水无码av在线 | 澳门一级毛片 | 欧美日韩一区免费 | jizzjizz丝袜老师 | 特黄色一级片 | 强壮公弄得小薇高潮 | 素人在线播放 | 久做在线视频免费观看 | 精品一二区 | 无码免费毛片手机在线 | 古典武侠激情亚洲精品一区 | 私人黄色影院 | 裸体女人高潮毛片扒开一一区 | 99午夜 | 狠狠爱ADY亚洲色 | 国产专业剧情av在线 | 成人免费看片视频 | 日日影视| 黄瓜视频入口永久免费观看 | 亚洲欧洲无码一区二区三区 | a天堂视频在线观看 | 91爱在线观看 | 欧美一级日韩一级亚洲一级 | 日韩精品在线免费视频 | 欧美精品一级 | 手机在线色 | 少妇搡BBBB搡BBB搡AA | 国产精品入口香蕉 | 国产专区免费av无码 | 在线观看av一区二区 | 国产福利在线观看91精品 | 久久中文高清 | av大片免费看 | 国产成人无精品久久久久国语 | 欧美高清69 | 亚洲欧美日本道视频 | 伊人精品在线观看 | 亚洲精品美女视频在线观看 | 无码国产玉足脚交极品网站 |