久久久国产精品视频袁燕,99re久久精品国产,亚洲欧美日韩国产综合v,天天躁夜夜躁狠狠久久,激情五月婷婷激情五月婷婷

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

C++指針學(xué)習(xí)和記錄

一直因?yàn)镃++指針燒腦,所以一直可以逃避這c++,但時(shí)最近有空并且感覺(jué)學(xué)習(xí)很多C++有點(diǎn)繞不過(guò)去,所以抱著最少能看懂程序的要求來(lái)學(xué)習(xí)C++,基本知識(shí)跟別的語(yǔ)言大同小異,但是指針確實(shí)看的一知半解,所以記錄一下提高自己,順便幫助需要的人。

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

type *var-name;

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

int    *ip;    /* 一個(gè)整型的指針 */
double *dp;    /* 一個(gè) double 型的指針 */
float  *fp;    /* 一個(gè)浮點(diǎn)型的指針 */
char   *ch;    /* 一個(gè)字符型的指針 */

所有指針的值的實(shí)際數(shù)據(jù)類型,不管是整型、浮點(diǎn)型、字符型,還是其他的數(shù)據(jù)類型,都是一樣的,都是一個(gè)代表內(nèi)存地址的長(zhǎng)的十六進(jìn)制數(shù)。不同數(shù)據(jù)類型的指針之間唯一的不同是,指針?biāo)赶虻淖兞炕虺A康臄?shù)據(jù)類型不同。

使用指針時(shí)操作步驟:定義一個(gè)指針變量、把變量地址賦值給指針、訪問(wèn)指針變量中可用地址的值。

實(shí)例如下:

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

當(dāng)上面的代碼被編譯和執(zhí)行時(shí),它會(huì)產(chǎn)生下列結(jié)果:

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

指針運(yùn)算:

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

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

ptr++

在執(zhí)行完上述的運(yùn)算之后,ptr 將指向位置 1004,因?yàn)?ptr 每增加一次,它都將指向下一個(gè)整數(shù)位置,即當(dāng)前位置往后移 4 個(gè)字節(jié)。這個(gè)運(yùn)算會(huì)在不影響內(nèi)存位置中實(shí)際值的情況下,移動(dòng)指針到下一個(gè)內(nèi)存位置。如果 ptr 指向一個(gè)地址為 1000 的字符,上面的運(yùn)算會(huì)導(dǎo)致指針指向位置 1001,因?yàn)橄乱粋€(gè)字符位置是在 1001。

我們喜歡在程序中使用指針代替數(shù)組,因?yàn)樽兞恐羔樋梢赃f增,而數(shù)組不能遞增,因?yàn)閿?shù)組是一個(gè)常量指針。下面的程序遞增變量指針,以便順序訪問(wèn)數(shù)組中的每一個(gè)元素:

實(shí)例如下:

#include <iostream>
 
using namespace std;
const int MAX = 3;
 
int main ()
{
   int  var[MAX] = {10, 100, 200};
   int  *ptr;
 
   // 指針中的數(shù)組地址
   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;
 
      // 移動(dòng)到下一個(gè)位置
      ptr++;
   }
   return 0;
}

當(dāng)上面的代碼被編譯和執(zhí)行時(shí),它會(huì)產(chǎn)生下列結(jié)果:

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;
 
   // 指針中最后一個(gè)元素的地址
   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;
 
      // 移動(dòng)到下一個(gè)位置
      ptr--;
   }
   return 0;
}
當(dāng)上面的代碼被編譯和執(zhí)行時(shí),它會(huì)產(chǎn)生下列結(jié)果:

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

指針數(shù)組:

指針和數(shù)組是密切相關(guān)的。事實(shí)上,指針和數(shù)組在很多情況下是可以互換的。例如,一個(gè)指向數(shù)組開頭的指針,可以通過(guò)使用指針的算術(shù)運(yùn)算或數(shù)組索引來(lái)訪問(wèn)數(shù)組

而指針數(shù)組,我們讓數(shù)組存儲(chǔ)指向 int 或 char 或其他數(shù)據(jù)類型的指針,聲明如下:

int *ptr[MAX];

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

#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]; // 賦值為整數(shù)的地址
   }
   for (int i = 0; i < MAX; i++)
   {
      cout << "Value of var[" << i << "] = ";
      cout << *ptr[i] << endl;
   }
   return 0;
}
當(dāng)上面的代碼被編譯和執(zhí)行時(shí),它會(huì)產(chǎn)生下列結(jié)果:

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

也可以用一個(gè)指向字符的指針數(shù)組來(lái)存儲(chǔ)一個(gè)字符串列表,如下:

#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;
}
當(dāng)上面的代碼被編譯和執(zhí)行時(shí),它會(huì)產(chǎn)生下列結(jié)果:

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

覺(jué)得重要的知識(shí)點(diǎn),暫時(shí)就總結(jié)到這些,倒數(shù)第二個(gè)實(shí)例不知道是不是有更好更簡(jiǎn)便的方法,還是最后一個(gè)實(shí)例中什么時(shí)候需要const (調(diào)試時(shí)發(fā)現(xiàn)沒(méi)有const就會(huì)報(bào)錯(cuò))。歡迎大家評(píng)論區(qū)留言和交流

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

語(yǔ)法跟C語(yǔ)言差不多,有空補(bǔ)習(xí)一下

0
回復(fù)
米修兒
LV.4
3
2021-12-22 08:52
@lihui710884923
語(yǔ)法跟C語(yǔ)言差不多,有空補(bǔ)習(xí)一下

是的,不過(guò)無(wú)論是C還是C++,指針是精髓,也是難點(diǎn)

0
回復(fù)
2021-12-22 14:59

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

0
回復(fù)
2021-12-22 14:59

文章寫的很通俗易懂,么事就過(guò)來(lái)溫習(xí)一遍,先收藏了

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

是的,指針一直是我想逃避的語(yǔ)法,沒(méi)辦法了才來(lái)學(xué)習(xí),所以記錄下來(lái),隨時(shí)過(guò)來(lái)復(fù)習(xí)

0
回復(fù)
2021-12-23 09:42

在程序中使用指針代替數(shù)組,因?yàn)樽兞恐羔樋梢赃f增,而數(shù)組不能遞增,確實(shí)指針會(huì)方便點(diǎn)。

0
回復(fù)
2021-12-23 09:46

語(yǔ)法上跟C語(yǔ)言大同小異,不過(guò)新的標(biāo)準(zhǔn)更新了不少

0
回復(fù)
米修兒
LV.4
9
2021-12-23 09:47
@米修兒
是的,不過(guò)無(wú)論是C還是C++,指針是精髓,也是難點(diǎn)

是的,有C基礎(chǔ)的話,學(xué)習(xí)起來(lái)就容易很多

0
回復(fù)
米修兒
LV.4
10
2021-12-23 09:48
@星球居民-sCcAfEGY
語(yǔ)法上跟C語(yǔ)言大同小異,不過(guò)新的標(biāo)準(zhǔn)更新了不少

嗯,新標(biāo)準(zhǔn)更人性化點(diǎn)

0
回復(fù)
2021-12-23 10:00

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

0
回復(fù)
dy-SLPHrVRz
LV.1
12
2021-12-23 15:29

看過(guò)C++一直沒(méi)學(xué)好指針,文章寫的通俗易懂,收藏了

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

寫的很詳盡,遇到問(wèn)題了過(guò)來(lái)一起討論

0
回復(fù)
2021-12-23 15:50

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

0
回復(fù)
2021-12-23 15:56

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

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

確實(shí)是,熟練了比數(shù)組用起來(lái)還要方便

0
回復(fù)
米修兒
LV.4
17
2021-12-23 16:03
@dy-SLPHrVRz
寫的很詳盡,遇到問(wèn)題了過(guò)來(lái)一起討論

歡迎有問(wèn)題來(lái)評(píng)論,一起探討學(xué)習(xí)

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

C++勝在執(zhí)行效率,學(xué)習(xí)起來(lái)還是C#快

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

項(xiàng)目實(shí)踐是最好的學(xué)習(xí)方式

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

指針上大學(xué)的時(shí)候沒(méi)學(xué)好,借著這個(gè)文章順便溫習(xí)回顧一下

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

聽(tīng)說(shuō)指針很強(qiáng)大,但是一直學(xué)的半生不熟的,有空好好學(xué)習(xí)一下

0
回復(fù)
米修兒
LV.4
27
2021-12-27 10:41
@星球居民-sCcAfEGY
在程序中使用指針代替數(shù)組,因?yàn)樽兞恐羔樋梢赃f增,而數(shù)組不能遞增,確實(shí)指針會(huì)方便點(diǎn)。

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

0
回復(fù)
米修兒
LV.4
28
2021-12-27 14:19
@dy-NCJU4yct
指針上大學(xué)的時(shí)候沒(méi)學(xué)好,借著這個(gè)文章順便溫習(xí)回顧一下

上大學(xué)的時(shí)候C都學(xué)過(guò),可是都還給老師了,大學(xué)是最好的學(xué)習(xí)時(shí)間

0
回復(fù)
米修兒
LV.4
29
2021-12-27 14:20
@dy-NCJU4yct
聽(tīng)說(shuō)指針很強(qiáng)大,但是一直學(xué)的半生不熟的,有空好好學(xué)習(xí)一下

學(xué)習(xí)c++的話指針是真的強(qiáng)大和方便

0
回復(fù)
2021-12-27 14:21

不錯(cuò)不錯(cuò),溫故而知新啊

0
回復(fù)
米修兒
LV.4
31
2021-12-27 14:21
@dy-NCJU4yct
指針上大學(xué)的時(shí)候沒(méi)學(xué)好,借著這個(gè)文章順便溫習(xí)回顧一下

上學(xué)是最好的學(xué)習(xí)時(shí)間,但是上學(xué)的時(shí)候不懂得珍惜

0
回復(fù)
發(fā)