国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【C語言進(jìn)階】 指針進(jìn)階(二)

這篇具有很好參考價值的文章主要介紹了【C語言進(jìn)階】 指針進(jìn)階(二)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

【C語言進(jìn)階】 指針進(jìn)階(二),C語言,c語言,開發(fā)語言,c++,數(shù)據(jù)結(jié)構(gòu),算法,大數(shù)據(jù),排序算法

??博客主頁:小王又困了

??系列專欄:C語言

??人之為學(xué),不日近則日退?

??感謝大家點(diǎn)贊??收藏?評論??


目錄

一.函數(shù)指針?

1.1函數(shù)指針的認(rèn)識

1.2函數(shù)指針的使用

二、函數(shù)指針數(shù)組

1.1函數(shù)指針的認(rèn)識

1.2 函數(shù)指針數(shù)組實現(xiàn)計算器

?三、指向函數(shù)指針數(shù)組的指針?

四、回調(diào)函數(shù)

通過使用qsort函數(shù)加強(qiáng)對回調(diào)函數(shù)的理解

qsort排序整形

qosrt排序結(jié)構(gòu)體?

?用冒泡排序的思想,模擬實現(xiàn)功能類似qsort的函數(shù)


前言:前面的的學(xué)習(xí)中,我們了解了字符指針,數(shù)組指針和指針數(shù)組,接下來就讓我繼續(xù)帶大家了解函數(shù)指針,函數(shù)指針數(shù)組,以及回調(diào)函數(shù)等重要知識。

一.函數(shù)指針?

1.1函數(shù)指針的認(rèn)識

函數(shù)指針 -- 指向函數(shù)的指針

函數(shù)指針的一般形式:

????????函數(shù)返回類型? ?(*函數(shù)名)(函數(shù)參數(shù)類型)

?例如:

void test(char* p ,int arr[5])
{}

int main()
{
    void (*pf)(char* ,int*)=&test;
    //函數(shù)指針
    return 0;
}
函數(shù)名的意義:?

【C語言進(jìn)階】 指針進(jìn)階(二),C語言,c語言,開發(fā)語言,c++,數(shù)據(jù)結(jié)構(gòu),算法,大數(shù)據(jù),排序算法

?函數(shù)名是函數(shù)的地址

&函數(shù)名也是函數(shù)的地址

1.2函數(shù)指針的使用

【C語言進(jìn)階】 指針進(jìn)階(二),C語言,c語言,開發(fā)語言,c++,數(shù)據(jù)結(jié)構(gòu),算法,大數(shù)據(jù),排序算法

?說明:pf前可以不加*,但加*是,要用括號括起來

代碼分析:

( * ( void (*)() ) 0) ();

1.( void (*)() ) 0將0強(qiáng)制類型轉(zhuǎn)化為void(*)()

2. * ( void (*)() ) 0調(diào)用0地址處的函數(shù)

二、函數(shù)指針數(shù)組

1.1函數(shù)指針的認(rèn)識

把函數(shù)的地址存到一個數(shù)組中,那這個數(shù)組就叫函數(shù)指針數(shù)組

?函數(shù)指針數(shù)組的一般形式,例如:

????????int? (*parr3[10]) ( );

1.2 函數(shù)指針數(shù)組實現(xiàn)計算器

【C語言進(jìn)階】 指針進(jìn)階(二),C語言,c語言,開發(fā)語言,c++,數(shù)據(jù)結(jié)構(gòu),算法,大數(shù)據(jù),排序算法

函數(shù)的參數(shù)返回類型相同,我們就可以將函數(shù)指針改寫成函數(shù)指針數(shù)組。

int Add(int a, int b)
{
	return a + b;
}
int Sub(int a, int b)
{
	return a - b;
}
int Mul(int a, int b)
{
	return a * b;
}
int Div(int a, int b)
{
	return a / b;
}


void menu()
{
	printf("***************************\n");
	printf("***1.Add           2.Sub***\n");
	printf("***3.Mul           4.Div***\n");
	printf("***0.exit          ********\n");
	printf("***************************\n");
}

int main()
{
	int input = 0;
	int x = 0;
	int y = 0;
	int  ret = 0;
	do
	{
		menu();
		printf("請選擇:");
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			printf("輸入操作數(shù):");
			scanf("%d %d", &x, &y);
			ret = Add(x, y);
			printf("ret = %d\n", ret);
			break;
		case 2:
			printf("輸入操作數(shù):");
			scanf("%d %d", &x, &y);
			ret = Sub(x, y);
			printf("ret = %d\n", ret);
			break;
		case 3:
			printf("輸入操作數(shù):");
			scanf("%d %d", &x, &y);
			ret = Mul(x, y);
			printf("ret = %d\n", ret);
			break;
		case 4:
			printf("輸入操作數(shù):");
			scanf("%d %d", &x, &y);
			ret = Div(x, y);
			printf("ret = %d\n", ret);
			break;
		case 0:
			printf("退出程序\n");
			break;
		default:
			printf("選擇錯誤\n");
			break;
		}
	} while (input);
	return 0;
}

?在case語句中,輸入和輸出函數(shù)多次出現(xiàn),使得程序看起來雜亂,冗余。如果想要實現(xiàn)更多的功能,要增加case語句,解決起來十分的不變,而且繁瑣。這是我們就可以用到函數(shù)指針數(shù)組來解決問題。

優(yōu)化代碼:

int main()
{
	int (*pfArr[5])(int, int) = { NULL,Add,Sub,Mul,Div };
	//下標(biāo)                         0    1   2   3   4   
	do
	{
		menu();
		printf("請選擇:");
		scanf("%d", &input);
		if (input > 0 && input < 5)
		{
			printf("輸入操作數(shù):");
			scanf("%d %d", &x, &y);
			ret = pfArr[input](x, y);
			printf("%d\n", ret);
		}
		else if (input == 0)
		{
			printf("退出程序\n");
		}
		else
		{
			printf("輸入錯誤,請重新輸入\n");
		}
	} while (input);
	return 0;
}

說明:在數(shù)組的第一個元素加NULL,使得Add函數(shù)的下標(biāo)為一,讓各個函數(shù)的下標(biāo)菜單輸入的數(shù)相對應(yīng),使得程序編寫更加簡便。

?三、指向函數(shù)指針數(shù)組的指針?

void test(const char* str)
{
     printf("%s\n", str);
}

int main()
{
     //函數(shù)指針pf
     void (*pf)(const char*) = test;

     //函數(shù)指針的數(shù)組pfArr
     void (*pfArr[5])(const char* str);

     //指向函數(shù)指針數(shù)組pfArr的指針ppfArr
     void (*(*ppfArr)[5])(const char*) = &pfArr;
     return 0;
}

代碼解析:?

&pfArr取出的是整個數(shù)組的地址,數(shù)組的地址應(yīng)該放在數(shù)組指針中。pfArr是函數(shù)指針數(shù)組,所以它的地址應(yīng)該放在指向函數(shù)指針數(shù)組的指針中。

*與ppfArr結(jié)合,說明ppfArr是指針,指向的是一個數(shù)組元素為5,類型為void(*)(const* char*)

四、回調(diào)函數(shù)

回調(diào)函數(shù)就是一個通過函數(shù)指針調(diào)用的函數(shù)。如果你把函數(shù)的指針(地址)作為參數(shù)傳遞給另一個函數(shù),當(dāng) 這個指針被用來調(diào)用其所指向的函數(shù)時,我們就說這是回調(diào)函數(shù)?;卣{(diào)函數(shù)不是由該函數(shù)的實現(xiàn)方直接調(diào) 用,而是在特定的事件或條件發(fā)生時由另外的一方調(diào)用的,用于對該事件或條件進(jìn)行響應(yīng)。

int Add(int a, int b)
{
	return a + b;
}
int Sub(int a, int b)
{
	return a - b;
}
int Mul(int a, int b)
{
	return a * b;
}
int Div(int a, int b)
{
	return a / b;
}


void menu()
{
	printf("***************************\n");
	printf("***1.Add           2.Sub***\n");
	printf("***3.Mul           4.Div***\n");
	printf("***0.exit          ********\n");
	printf("***************************\n");
}

void Calc(int (*p)(int ,int))
{
	int x = 0;
	int y = 0;
	int  ret = 0;
	printf("輸入兩個操作數(shù):>");
	scanf("%d%d", &x, &y);
	ret = p(x, y);
	printf("%d\n", ret);
}

int main()
{
	int input = 0;
	do
	{
		menu();
		printf("請選擇:");
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			Calc(Add);
			break;
		case 2:
			Calc(Sub);
			break;
		case 3:
			Calc(Mul);
			break;
		case 4:
			Calc(Div);
			break;
		case 0:
			printf("退出程序\n");
			break;
		default:
			printf("選擇錯誤\n");
			break;
		}
	} while (input);
	return 0;
}

【C語言進(jìn)階】 指針進(jìn)階(二),C語言,c語言,開發(fā)語言,c++,數(shù)據(jù)結(jié)構(gòu),算法,大數(shù)據(jù),排序算法

通過使用qsort函數(shù)加強(qiáng)對回調(diào)函數(shù)的理解

qsort函數(shù)的特點(diǎn):

1.快速排序的方法

2.適用于任何類型的排序

【C語言進(jìn)階】 指針進(jìn)階(二),C語言,c語言,開發(fā)語言,c++,數(shù)據(jù)結(jié)構(gòu),算法,大數(shù)據(jù),排序算法

void qsort(void* base, 
		   size_t num, 
		   size_t size,
	       int (*cmp)(const void*, const void*));

我們從函數(shù)的定義可以看到,qsort函數(shù)調(diào)用時要傳入四個參數(shù)

  • void* base? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?base指向的是待排序數(shù)組的第一個元素,由于我們不知道要排序數(shù)組的類型,所以使用void*
  • size_t num? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?待排序數(shù)組中元素的個數(shù)
  • size_t size? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 待排序數(shù)組中,一個元素所占字節(jié)的大小
  • int (*cmp)(const void*, const void*))? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?cmp是比較函數(shù),傳入的是要比較的兩個數(shù)的地址 用void*接收是因為不知道參數(shù)的類型。void* 是無具體類型類型的指針? ?可以接受任意類型的指針? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
?判斷條件

【C語言進(jìn)階】 指針進(jìn)階(二),C語言,c語言,開發(fā)語言,c++,數(shù)據(jù)結(jié)構(gòu),算法,大數(shù)據(jù),排序算法?int (*cmp)(const void* p1, const void* p2))

  • p1指向的值小于p2指向的值? --? 返回小于0的數(shù)
  • p1指向的值等于p2指向的值? --? 返回0
  • p1指向的值大于p2指向的值? --? 返回大于0的值?

?注意:使用qsort函數(shù)是要引用頭文件的

#include? <stdlib.h>

qsort排序整形

#include <stdio.h>
#include <stdlib.h>
int cmp_int(const void* p1, const void* p2)
{
	return (*(int*)p1 - *(int*)p2);
}

void print(int arr[], int sz)
{
	int i = 0;
	for (i = 0; i < sz; i++)
	{
		printf("%d ", arr[i]);
	}
}

void test()
{
	int arr[10] = { 4,7,1,3,0,8,2,5,6,9 };
	int sz = sizeof(arr) / sizeof(arr[0]);
	qsort(arr, sz, sizeof(arr[0]), cmp_int);
	print(arr, sz);
}

int main()
{
	test();
	return 0;
}

?【C語言進(jìn)階】 指針進(jìn)階(二),C語言,c語言,開發(fā)語言,c++,數(shù)據(jù)結(jié)構(gòu),算法,大數(shù)據(jù),排序算法

說明:qsort函數(shù)默認(rèn)是升序的。我們只需將p1和p2的位置調(diào)換,就可以實現(xiàn)降序。

qosrt排序結(jié)構(gòu)體?

#include <stdio.h>
#include <stdlib.h>
#include <stdio.h>
struct stu
{
	char name[20];
	int age;
};

int cmp_stu_by_name(const void* p1, const void* p2)
{
	return strcmp(((struct stu*)p1)->name, ((struct stu*)p2)->name);
}

void print(struct stu *p, int sz)
{
	int i = 0;
	for (i = 0; i < sz; i++)
	{
		printf("%s\n", (p + i)->name);
	}
}

void test()
{
	struct stu arr[] = { {"zhangsan",24},{"lisi",15},{"wangwu",30} };
	int sz = sizeof(arr) / sizeof(arr[0]);
	qsort(arr, sz, sizeof(arr[0]), cmp_stu_by_name);
	print(arr, sz);
}

int main()
{
	test();
	return 0;
}

【C語言進(jìn)階】 指針進(jìn)階(二),C語言,c語言,開發(fā)語言,c++,數(shù)據(jù)結(jié)構(gòu),算法,大數(shù)據(jù),排序算法

?用冒泡排序的思想,模擬實現(xiàn)功能類似qsort的函數(shù)

用冒泡排序?qū)崿F(xiàn)全類型的排序會有三個問題

【C語言進(jìn)階】 指針進(jìn)階(二),C語言,c語言,開發(fā)語言,c++,數(shù)據(jù)結(jié)構(gòu),算法,大數(shù)據(jù),排序算法

解決一我們可以仿照qsort函數(shù)傳遞void*的指針,同時傳遞要排序的元素的個數(shù)和每個元素的字節(jié)

解決二可以將兩個元素的比較方法,以函數(shù)參數(shù)的形式傳遞。

【C語言進(jìn)階】 指針進(jìn)階(二),C語言,c語言,開發(fā)語言,c++,數(shù)據(jù)結(jié)構(gòu),算法,大數(shù)據(jù),排序算法

void Swap(char* buf1, char* buf2, int size)//交換arr[j],arr[j+1]這兩個元素
{
	int i = 0;
	char tmp = 0;
	for (i = 0; i < size; i++)
	{
		tmp = *buf1;
		*buf1 = *buf2;
		*buf2 = tmp;
		buf1++;
		buf2++;
	}
}


int cmp_int(const void* p1, const void* p2)
{
	return (*(int*)p1 - *(int*)p2); 
}


void bubble_sort(void* base, int sz, int size, int (*cmp)(const void*, const void*))
{
	int i = 0;
	for (i = 0; i < sz - 1; i++)
	{
		int j = 0;
		for (j = 0; j < sz - 1 - i; j++)
		{
			//假設(shè)要排升序,cmp返回>0
			if (cmp((char*)base + j * size, (char*)base + (j + i) * size) > 0)
			{
				//交換
				Swap((char*)base + j * size, (char*)base + (j + i) * size, size);
			}
			
		}
	}
}


void print(int arr[], int sz)
{
	int i = 0;
	for (i = 0; i < sz; i++)
	{
		printf("%d ", arr[i]);
	}
}

void test()
{
	int arr[10] = { 4,7,1,3,0,8,2,5,6,9 };
	int sz = sizeof(arr) / sizeof(arr[0]);
	bubble_sort(arr, sz, sizeof(arr[0]), cmp_int);
	print(arr, sz);
}

int main()
{
	test();
	return 0;
}

本次的內(nèi)容到這里就結(jié)束啦。希望大家閱讀完可以有所收獲,同時也感謝各位讀者的支持。文章有問題可以在評論區(qū)留言,博主一定認(rèn)真認(rèn)真修改,以后寫出更好的文章。??文章來源地址http://www.zghlxwxcb.cn/news/detail-610666.html

到了這里,關(guān)于【C語言進(jìn)階】 指針進(jìn)階(二)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 手撕數(shù)據(jù)結(jié)構(gòu)與算法——樹(三指針描述一棵樹)

    手撕數(shù)據(jù)結(jié)構(gòu)與算法——樹(三指針描述一棵樹)

    ??作者介紹:22級樹莓人(計算機(jī)專業(yè)),熱愛編程<目前在c++階段, 因為最近參加新星計劃算法賽道(白佬),所以加快了腳步,果然急迫感會增加動力 ——目標(biāo)Windows,MySQL,Qt,數(shù)據(jù)結(jié)構(gòu)與算法,Linux,多線程,會持續(xù)分享學(xué)習(xí)成果和小項目的 ??作者主頁:king南星 ??

    2024年01月17日
    瀏覽(62)
  • C語言進(jìn)階——數(shù)據(jù)結(jié)構(gòu)之鏈表(續(xù))

    C語言進(jìn)階——數(shù)據(jù)結(jié)構(gòu)之鏈表(續(xù))

    hello,大家好呀,我是Humble,本篇博客承接之前的 C語言進(jìn)階——數(shù)據(jù)結(jié)構(gòu)之鏈表 的內(nèi)容 (沒看過的小伙伴可以從我創(chuàng)建的專欄C語言進(jìn)階之?dāng)?shù)據(jù)結(jié)構(gòu) 找到那篇文章并閱讀后在回來哦~) ,上次我們重點(diǎn)說了鏈表中的 單鏈表 ,即 不帶頭單向不循環(huán)鏈表 還說到了鏈表的分類雖

    2024年01月25日
    瀏覽(22)
  • 【C語言進(jìn)階篇】看完這篇結(jié)構(gòu)體文章,我向數(shù)據(jù)結(jié)構(gòu)又進(jìn)了一大步!(結(jié)構(gòu)體進(jìn)階詳解)

    【C語言進(jìn)階篇】看完這篇結(jié)構(gòu)體文章,我向數(shù)據(jù)結(jié)構(gòu)又進(jìn)了一大步!(結(jié)構(gòu)體進(jìn)階詳解)

    ?? 鴿芷咕 :個人主頁 ??? 個人專欄 :《C語言初階篇》 《C語言進(jìn)階篇》 ??生活的理想,就是為了理想的生活! ?? ?? hello! 各位寶子們大家好啊,結(jié)構(gòu)體的基本使用和常見錯誤在上一篇詳細(xì)講解過了,不知道大家都學(xué)會了沒有。 ?? ?? 今天給大家來個硬菜,教點(diǎn)高

    2024年02月15日
    瀏覽(22)
  • 【算法數(shù)據(jù)結(jié)構(gòu)系列】哈夫曼樹進(jìn)階解讀

    作者:半身風(fēng)雪 簡介:移動開發(fā)全棧領(lǐng)域工作者

    2024年02月10日
    瀏覽(27)
  • C語言完整版筆記(初階,進(jìn)階,深刨,初階數(shù)據(jù)結(jié)構(gòu))

    1.初階: 1.1C語言初階易忘知識點(diǎn)速記 2.進(jìn)階:? 1.2C語言進(jìn)階易忘點(diǎn)速記 3.深剖: 2.1C語言重點(diǎn)解剖要點(diǎn)速記 2.2C語言重點(diǎn)解剖操作符要點(diǎn)速記?? 2.3C語言重點(diǎn)解剖預(yù)處理要點(diǎn)速記 2.4C語言重點(diǎn)解剖指針和數(shù)組要點(diǎn)速記 2.5C語言重點(diǎn)解剖內(nèi)存管理函數(shù)要點(diǎn)速記 4.數(shù)據(jù)結(jié)構(gòu):

    2024年02月16日
    瀏覽(24)
  • 【數(shù)據(jù)結(jié)構(gòu)與算法】- (帶尾指針)單循環(huán)鏈表 - 詳細(xì)實現(xiàn)步驟及代碼(C/C++)

    【數(shù)據(jù)結(jié)構(gòu)與算法】- (帶尾指針)單循環(huán)鏈表 - 詳細(xì)實現(xiàn)步驟及代碼(C/C++)

    前三篇文章分別介紹了 “帶頭結(jié)點(diǎn)單鏈表實現(xiàn)”、“不帶頭結(jié)點(diǎn)單鏈表實現(xiàn)”、“帶頭結(jié)點(diǎn)單循環(huán)鏈表實現(xiàn)”。 這篇文章主要介紹 帶尾指針 的單循環(huán)鏈表以及詳細(xì)的實現(xiàn)步驟,最后提供我自己根據(jù)理解實現(xiàn)帶尾指針單循環(huán)鏈表的C語言代碼 。跟著后面實現(xiàn)思路看下去,應(yīng)該

    2024年02月16日
    瀏覽(41)
  • C語言數(shù)據(jù)結(jié)構(gòu)與算法

    冒泡排序 例題 順序表下的 冒泡排序 注意:冒泡排序 穩(wěn)定,最多執(zhí)行n(n-1)/2次 選擇排序不穩(wěn)定,平均比較次數(shù)n(n-1)/2 直接插入排序,是在有序基礎(chǔ)上,速度最快且穩(wěn)定的排序方法。 希爾排序是 不穩(wěn)定的 順序查找 二分查找(非遞歸) 二分查找(遞歸) 數(shù)組 鏈表 查詢 快 慢

    2024年02月06日
    瀏覽(92)
  • 數(shù)據(jù)結(jié)構(gòu)——排序算法(C語言)

    數(shù)據(jù)結(jié)構(gòu)——排序算法(C語言)

    本篇將詳細(xì)講一下以下排序算法: 直接插入排序 希爾排序 選擇排序 快速排序 歸并排序 計數(shù)排序 排序的概念 排序:所謂排序,就是使一串記錄,按照其中的某個或某寫的大小,按照遞增或遞減0排列起來的操作。 穩(wěn)定性的概念 假定在待排序的記錄序列中,存在多個

    2024年02月08日
    瀏覽(103)
  • 數(shù)據(jù)結(jié)構(gòu)和算法——用C語言實現(xiàn)所有圖狀結(jié)構(gòu)及相關(guān)算法

    數(shù)據(jù)結(jié)構(gòu)和算法——用C語言實現(xiàn)所有圖狀結(jié)構(gòu)及相關(guān)算法

    本文所有代碼均在倉庫中,這是一個完整的由純C語言實現(xiàn)的可以存儲任意類型元素的數(shù)據(jù)結(jié)構(gòu)的工程項目。 首先是極好的工程意識,該項目是一個中大型的CMake項目,結(jié)構(gòu)目錄清晰,通過這個項目可以遇見許多工程問題并且可以培養(yǎng)自己的工程意識。 其次是優(yōu)秀的封裝性(

    2024年02月06日
    瀏覽(1449)
  • 數(shù)據(jù)結(jié)構(gòu)與算法——排序(C語言實現(xiàn))

    數(shù)據(jù)結(jié)構(gòu)與算法——排序(C語言實現(xiàn))

    ???????????????? ???????????????? ???????????????????????????????? ???????????????????????????????? ???? 追風(fēng)趕月莫停留 ???? ???????????????????????????????? ???? 平蕪盡處是春山

    2024年04月09日
    瀏覽(98)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包