日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python 指针_指针篇 | 指针的灵活让我想起了Python

發(fā)布時間:2025/3/21 python 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python 指针_指针篇 | 指针的灵活让我想起了Python 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

本文的題目其實有點蹭Python熱度的意思,指針確實很靈活,當然易用程度和Python還是沒得比,想要靈活使用指針,仍然要花大工夫。但一旦你感受到了指針的真諦,你也就自然能夠感受到指針的靈活了!本文通過字符串這一載體,為指針打個call。

1.數(shù)組和指針

為什么先要介紹下數(shù)組和指針,因為在C語言中,并沒有字符串類型,字符串往往是搭載在字符數(shù)組,和指針中的。因此在開篇對數(shù)組和指針的異同做個簡單的介紹。其實數(shù)組和指針我們都可以認為和int,float一樣是一種變量類型。

1.數(shù)組類型:固定大小內(nèi)存塊的別名,數(shù)組名是保存該內(nèi)存塊首地址的變量類型。

2.指針類型:保存某一內(nèi)存的地址的變量類型。

其實聽上去好像數(shù)組名和指針沒什么區(qū)別。確實,大部分情況下,數(shù)組名的用法和指針是一樣的,如下代碼所示。

void main()

{

int i = 0;

char *p = NULL;

char buf5[128] = "ylylylylyl"; // buf

for (i=0; i

{

printf("%c ", buf5[i]);

}

p = buf5; //buf 代表數(shù)組首元素的地址

for (i=0; i

{

p = p +i;

printf("%c ", *p ) ;

}

//buf

for (i=0; i

{

printf("%c ", *(buf5+i) ) ;

}

//[] *的推導過程

// buf5[i] ===> buf5[0+i]; ==> *(buf5+i);

printf("hello....\n");

system("pause");

}

如上述代碼所示,我們可以發(fā)現(xiàn)數(shù)組名和指針有兩個共同點:

1.[]的本質(zhì) 和*p 是一樣 ,只不過是符合程序員的閱讀習慣。

2.讀取數(shù)據(jù)時,指針和數(shù)組名的用法一致。

但需要注意的是數(shù)組名有一個特性,為常量指針,原因在于數(shù)組類型是局部變量,最終編譯器需要自動釋放內(nèi)存空間,所以其首地址指向是不能變的,一旦變了就不能釋放了。而指針沒有這個限定。如下代碼所示,若是改變數(shù)組名的指向,程序是會報錯的。

{

buf5 = buf5 + 1;

buf5 = 0x11;

}

2.字符串

上述已經(jīng)介紹了數(shù)組和指針的異同,接下來進入正題。我們將通過字符串,來進一步論述下數(shù)組和指針在操作時內(nèi)存模型的區(qū)別。

void main61()

{

char buf[20]= "yy"; //定義并且初始化

char buf2[] = "ll";

char *p1 = "jj";

char *p2 = malloc(100);

strcpy(p2, "mm");

return ;

}

如上述代碼和對應的內(nèi)存四區(qū)模型所示,可以很清晰的看到數(shù)組和指針在操縱字符串時的區(qū)別。很顯然的是指針操縱字符串將會更方便。

Note:在上述內(nèi)存四區(qū)模型中,我們可以看到每個字符串后面有一個“/0”,該字符是每個字符串都會有的,表示字符串結(jié)束的標志。而基于此,需要對字符串的長度和對應的存放字符串的字符數(shù)組的長度作區(qū)分。如下代碼所示,很顯然字符數(shù)組的長度要比對應存放的字符串長度大。strlen 和 sizeof,其實sizeof求得的是計算機感知到的長度,strlen得到的是一種人類理解上的長度。

#strlen() 長度 不包括0

#sizeof() 內(nèi)存塊的大小

void main()

{

int size = 0;

char buf3[] = "abcd";

int len = strlen(buf3);

printf("buf3字符的長度:%d \n", len); #輸出4

size = sizeof(buf3);

printf("buf3數(shù)組所占內(nèi)存空間大小:%d \n", size); #輸出5

return ;

}

3.指針是如何高效操縱字符串的

利用指針實現(xiàn)字符串的拷貝。如下述代碼所示,利用指針,一句話while ( *tmpto++ = *tmpfrom++ ) ;就能實現(xiàn)這個功能(其余代碼都是為了代碼的接口封裝,和代碼的穩(wěn)健性所存在的。)

//不要輕易改變形參的值, 要引入一個輔助的指針變量. 把形參給接過來.....

int copy_str26_good(char *from , char *to)

{

char *tmpfrom = from;

char *tmpto = to;

if ( from == NULL || to == NULL)

{

return -1;

}

while ( *tmpto++ = *tmpfrom++ ) ; //空語句

return 0;

}

int main()

{

int ret = 0;

char *from = "abcd";

char buf2[100];

ret = copy_str26_good(from, buf2);

if (ret != 0)

{

printf("func copy_str26_good() err:%d ", ret);

return ret;

}

return ret;

}

利用指針實現(xiàn)從對應的長字符串中,找出短字符串出現(xiàn)的次數(shù)。

//求字符串p中子串 abcd出現(xiàn)的次數(shù)

int getCount(char *mystr /*in*/, char *sub /*in*/,int *ncount)

{

int ret = 0;

int tmpCount = 0;

char *p = mystr; //不要輕易改變形參的值,因此把形參接過來

//防止程度掛掉

if (mystr==NULL || sub==NULL ||ncount==NULL)

{

ret = -1;

printf("func getCount() err:%d (mystr==NULL || sub==NULL ||ncount==NULL) \n", ret);

return ret;

}

do

{

p = strstr(p, sub);

if (p != NULL)

{

tmpCount++;

p = p + strlen(sub); //指針達到下次查找的條件

}

else

{

break;

}

} while (*p != '\0');

*ncount = tmpCount; //間接賦值是指針存在的最大意義

return ret;

}

int main()

{

int ret = 0;

char *p = "abcd111122abcd3333322abcd3333322qqq";

int count = 0;

char sub[] = "abcd";

ret = getCount(p,sub, &count);

if (ret != 0)

{

printf("func getCount() err:%d \n", ret);

return ret;

}

//若在子函數(shù)中不對輸入指針形參進行判斷,則下述代碼就會掛掉

ret = getCount(p,NULL, &count);

if (ret != 0)

{

printf("func getCount() err:%d \n", ret);

return ret;

}

printf("count:%d \n", count);

}

總之,如果你對指針操作數(shù)據(jù)時的內(nèi)存模型有一個清晰的認知,那么你用起指針來將會溜的飛起。。。而且相較與python而言,掌控感更強。當然就筆者的使用經(jīng)驗來說,如果你僅僅是想開發(fā)上述例子中的對應功能,或者是leetcode刷題,建議使用python。如果你對內(nèi)存指針感興趣,未來又可能會從事面向設備的編程,建議在空閑時間深入學習下指針。(我在學校搞深度學習以及剛開始工作練模型的時候也沒想到我居然會慢慢的對指針這玩意這么感興趣。。。)

總結(jié)

以上是生活随笔為你收集整理的python 指针_指针篇 | 指针的灵活让我想起了Python的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 波多野结衣 在线 | 精品国产乱码一区二区三区99 | 国产性猛交╳xxx乱大交一区 | 中文字幕在线2021 | 久久婷婷五月综合色国产香蕉 | 男人插女人视频网站 | 欧美乱码精品一区二区 | 美女裸体跪姿扒开屁股无内裤 | 人人干在线视频 | 91av在线免费 | 日韩成人av毛片 | 成年人的视频网站 | 殴美一级黄色片 | 亚洲综合激情另类小说区 | 妺妺窝人体色777777 | 天天插综合网 | 国产成人精品无码免费看81 | 美国免费高清电影在线观看 | 欧美日本一本 | 欧美成人免费在线视频 | 久草香蕉视频 | 色哟哟视频网站 | 日韩欧美成人精品 | 久久网页| 日本不卡在线 | 777片理伦片在线观看 | 好吊妞视频在线观看 | 538国产视频 | 亚洲爽片 | 性色av一区二区三区免费 | 91丨porny丨海角社区 | 日韩久久av| 国产三级大片 | 国产精品美女久久久久久久 | 精品久久久久久一区二区里番 | 日韩大片免费 | 日韩综合久久 | 刘亦菲毛片| 毛片高清免费 | 免费在线观看网址入口 | 国产免费一区视频观看免费 | 中文字幕一区二区人妻在线不卡 | 中文字幕第 | 色婷久久| 黄色网址中文字幕 | 福利片在线播放 | 熊猫电影yy8y全部免费观看 | 少妇吹潮 | 97香蕉超级碰碰久久免费软件 | 四色在线 | 国产精品日日夜夜 | 欧美日韩色片 | 免费看国产曰批40分钟 | 久久艹伊人 | 国产美女在线看 | 国产一区在线免费 | 亚洲精品乱码久久久久久蜜桃欧美 | 欧美黄色小说视频 | 色香蕉在线 | 日韩网红少妇无码视频香港 | www.国产91 | 成年人在线观看视频 | 日韩大片在线观看 | 免费吃奶摸下激烈视频 | 日韩中文字幕免费 | 亚洲综合一区在线观看 | 美女被男生免费视频 | 欧美黄色性 | 欧美视频在线观看 | 台湾色综合 | 国产伦精品一区二区三区四区视频 | 色哟哟免费在线观看 | 久久亚洲影视 | 男人免费网站 | 国产在线播放一区二区三区 | 精品久久免费 | 黄色xxxxx| 91大神小宝寻花在线观看 | 国产高清免费在线播放 | 18岁毛片 | 女人一级一片30分 | 欧美黄色大片免费观看 | 国产一级视频 | 亚洲精品aⅴ中文字幕乱码 国产精品调教视频 | 日韩中文字幕综合 | 国产免费91视频 | 秋霞午夜鲁丝一区二区 | 欧美一区二区三区影院 | 琪琪五月天 | 欧美cccc极品丰满hd | 在线天堂1 | 黄色片在线免费 | 豆花免费跳转入口官网 | 日韩一区不卡 | 清冷学长被爆c躁到高潮失禁 | 国产精品美女www爽爽爽 | 免费观看亚洲视频 | 天天操天天舔 | 末发成年娇小性xxxxx |