最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

一篇文章帶你了解C語言指針進階

 更新時間:2021年09月15日 09:16:42   作者:ZDDWLIG  
這篇文章主要介紹了C語言指針詳解及用法示例,介紹了其相關概念,然后分享了幾種用法,具有一定參考價值。需要的朋友可以了解下

1.字符指針

我們已經知道了數(shù)組名在大部分時候表示數(shù)組的地址,指針本質上也表示一個地址,那么我們能否用指針來創(chuàng)建一個字符串呢?

int main()
{
	char arr1[] = "abcdef";
	char arr2[] = "abcdef";
	const char* p1 = "abcdef";
	const char* p2 = "abcdef";//const可省略,默認為常量字符串
	printf("%s\n", arr1);
	printf("%s\n", arr2);
	printf("%s\n", p1);
	printf("%s\n", p2);
	return 0;
}

需要注意的是字符指針創(chuàng)建的字符串是常量字符串,普通的字符串只要數(shù)組名不同即使字符串內容相同,也是不同的字符串,但是不論用多少個指針創(chuàng)建字符串,只要字符串內容相同,所有指針指向的就是同一個字符串,因此字符指針指向的字符串不能修改,在沒有const修飾的情況下也是如此。

2.指針數(shù)組

我們知道數(shù)組可以存儲整形,浮點型,或自定義的結構體,那么可不可以存儲指針呢?答案是:可以。元素都為指針的數(shù)組就稱為指針數(shù)組,形式為:數(shù)據(jù)類型* 數(shù)組名[ ],例如:儲存整形指針的指針數(shù)組創(chuàng)建成int*p[10],表示的就是一個包含十個指針元素的數(shù)組,利用指針數(shù)組我們可以訪問指針數(shù)組內的指針進而操作變量或其他數(shù)組。

int main()//利用指針數(shù)組分別遍歷三個數(shù)組
{
	int arr1[] = { 1, 2, 3, 4, 5 };
	int arr2[] = { 2, 3, 4, 5, 6 };
	int arr3[] = { 3, 4, 5, 6, 7 };
	int*parr[] = { arr1, arr2, arr3 };
	int i, j;
	int Sz = sizeof(parr) / sizeof(parr[0]);
	int sz = sizeof(arr1) / sizeof(arr1[0]);
	for (i = 0; i < Sz; i++)
	{
		for (j = 0; j < sz; j++)
		{
			printf("%d ",*(parr[i]+j) );
		}
		printf("\n");
	}
}

3.數(shù)組指針

我們知道指針可以指向整形,浮點型,或自定義的結構體,那么能不能指向數(shù)組呢?答案也是:可以。指向數(shù)組的指針稱為數(shù)組指針,形式為:數(shù)據(jù)類型(*p)[ ] ,例如int(*p)[10],表示的就是一個指向包含十個元素數(shù)組的指針,這和指針數(shù)組的區(qū)別在于要將*p用小括號括起來以確保它是一個指針而非數(shù)組(無括號的情況下p先和 [ ]結合)。

int main()利用數(shù)組指針遍歷數(shù)組
{
	int arr[6] = { 1, 2, 3, 4, 5, 6 };
	int(*p)[6] = &arr;
	int i;
	int sz = sizeof(arr) / sizeof(arr[0]);
	for (i=0;i<sz;i++)
	printf("%d", (*p)[i]);
	//int*arr[5];
	//int*(*p)[5]=&arr;//int(*p[10])[5]-->p[10]是一個指針數(shù)組,剩下int(*  )[5]的是數(shù)組的類型,類型為數(shù)組指針,p是一個數(shù)組有十個元素,每個元素都是一個數(shù)組指針,指向的數(shù)組有五個int類型的元素
	return 0;
}

有了指針數(shù)組和數(shù)組指針,我們還可以進行兩者的嵌套使用,例如:數(shù)組指針數(shù)組(int(*p[ ])[ ]),指針數(shù)組指針(int*(*p)[ ]),前者是一個數(shù)組里面的元素是指向另外一些數(shù)組的指針,后者是個指針指向一個元素全為另外一些指針的數(shù)組。

void print(int(*p)[5],int x,int y)//用數(shù)組指針接收數(shù)組地址
{
	int i,j;
	for (i = 0; i < x; i++)
	{
		for (j = 0; j < y; j++)
		{
			printf("%d ", *(*(p + i) + j));//arr[i]==*(arr+i)==*(p+i)==p[i]
		}
		printf("\n");
	}
}
int main()//利用數(shù)組指針遍歷二維數(shù)組
{
	int arr[3][5] = { { 1, 2, 3, 4, 5 }, { 2, 3, 4, 5, 6 }, { 3, 4, 5, 6, 7 } };
	print(arr, 3, 5);//arr是首元素地址,二維數(shù)組的首元素是個第一行的一維數(shù)組
	return 0;
}

4.函數(shù)指針

我們知道指針可以指向整形,浮點型,自定義的結構體和數(shù)組,那么能不能指向一個函數(shù)呢?答案同樣是:可以。函數(shù)指針的形式為:函數(shù)返回類型(*p)(參數(shù)類型,參數(shù)類型....)例如:int(*p)(int,int)表示的就是一個指向返回類型為整形,兩個參數(shù)類型也是整形的函數(shù)的指針。注意:利用函數(shù)指針調用函數(shù)時有幾個解引用操作符都可以沒有也可以,但是括號不可或缺!

int Mul(int x, int y)
{
	return x*y;
}
int main()
{
	int a, b;
	scanf("%d%d", &a, &b);
	int(*p)(int,int) = &Mul;//函數(shù)指針,有無&都可以
	printf("%d", (p)(a, b));//用指針調用函數(shù)(*(void(*)()0))()
	printf("%d", (*p)(a, b)); 
	printf("%d", (**p)(a, b));
	printf("%d", (***p)(a, b));//任意個數(shù)的*都可以
	return 0;
}

5.數(shù)組傳參

我們知道簡單的一維數(shù)組的傳參方式:數(shù)組名是首元素地址,我們可以直接用指針接收也可以直接用數(shù)組接收,那么指針數(shù)組和二維數(shù)組呢?指針數(shù)組傳參傳的也是其首元素的地址,而它的首元素是一個指針,指針的地址我們當然用二級指針接收,同樣地我們也可以直接指針數(shù)組接收。二維數(shù)組傳參傳的是其首元素的地址,要注意的是,二維數(shù)組的首元素并不是第一個元素而是第一行元素所構成的一維數(shù)組,一維數(shù)組的地址我們當然用數(shù)組指針接收,同樣地,我們也可以直接用二維數(shù)組接收。

void test1(int arr[])//直接數(shù)組接收
{
	printf("%d\n", arr[]);
}
void test2(int*arr)//指針接收首元素地址
{
	printf("%d\n", arr[]);
}
void test3(int arr[][5])//二位數(shù)組直接接收
{
	printf("%d\n", arr[][5]);
}
void test4(int(*arr)[5])//數(shù)組指針接收
{
	printf("%d\n", arr);
}
void test5(int*arr[])//直接指針數(shù)組接收
{
	printf("%d\n", arr);
}
void test6(int**arr)//二級指針接收
{
	printf("%d\n", arr);
}
int main()
{
	int arr1[5] = {1,2,3,4,5};
	int arr2[3][5] = {1,2,3,4,5};
	int* arr3[5] = {NULL};
	test1(arr1);
	test2(arr1);
	test3(arr2);
	test4(arr2);
	test5(arr3);
	test6(arr3);
	return 0;
}

總結

本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關注腳本之家的更多內容!

相關文章

  • vs code 配置python虛擬環(huán)境的方法

    vs code 配置python虛擬環(huán)境的方法

    這篇文章主要介紹了vs code 配置python虛擬環(huán)境的方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-03-03
  • C/C++實現(xiàn)快速排序(兩種方式)圖文詳解

    C/C++實現(xiàn)快速排序(兩種方式)圖文詳解

    這篇文章主要介紹了C/C++實現(xiàn)快速排序的方法,這幾天在找工作,被問到快速排序,結果想不出來快速排序怎么弄的;回來搜索了一下,現(xiàn)在記錄下來,方便以后查看
    2021-08-08
  • C++中函數(shù)的默認參數(shù)詳細解析

    C++中函數(shù)的默認參數(shù)詳細解析

    在函數(shù)聲明或定義時,直接對參數(shù)賦值,該參數(shù)就是默認參數(shù)。在函數(shù)調用時,省略部分或全部參數(shù),這時就會使用默認參數(shù)進行代替
    2013-10-10
  • c++11中關于std::thread的join的詳解

    c++11中關于std::thread的join的詳解

    這篇文章主要介紹了c++11中關于std::thread的join詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-03-03
  • C++簡明分析臨時對象是什么

    C++簡明分析臨時對象是什么

    對性能來說,許多的問題都需要和出現(xiàn)頻率及本身執(zhí)行一次的開銷掛鉤,有些問題雖然看似比較開銷較大,但是很少會執(zhí)行到,那也不會對程序有大的影響;同樣一個很小開銷的函數(shù)執(zhí)行很頻繁,同樣會對程序的執(zhí)行效率有很大影響。本章中作者主要根據(jù)臨時對象來闡述這樣一個觀點
    2022-04-04
  • C語言單循環(huán)鏈表的表示與實現(xiàn)實例詳解

    C語言單循環(huán)鏈表的表示與實現(xiàn)實例詳解

    這篇文章主要介紹了C語言單循環(huán)鏈表的表示與實現(xiàn),對于學習數(shù)據(jù)結構與算法的朋友來說很有參考借鑒價值,需要的朋友可以參考下
    2014-07-07
  • ros項目調試:vscode下配置開發(fā)ROS項目的詳細教程

    ros項目調試:vscode下配置開發(fā)ROS項目的詳細教程

    這篇文章主要介紹了ros項目調試:vscode下配置開發(fā)ROS項目,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-08-08
  • 詳解Qt中的雙緩沖機制與實例應用

    詳解Qt中的雙緩沖機制與實例應用

    所謂雙緩沖機制,是指在繪制控件時,首先將要繪制的內容繪制在一個圖片中,再將圖片一次性地繪制到控件上。本文主要為大家介紹了Qt中的雙緩沖機制與實例應用,希望對大家有所幫助
    2023-03-03
  • VS+Qt+Halcon 顯示圖片,實現(xiàn)鼠標縮放、移動圖片

    VS+Qt+Halcon 顯示圖片,實現(xiàn)鼠標縮放、移動圖片

    本篇博文記錄一下,用VS+Qt+Halcon實現(xiàn)對圖片的讀取以及鼠標縮放,移動(鼠標事件調用了halcon自帶的算子)的過程。感興趣的可以了解一下
    2021-08-08
  • C++中gSOAP的使用詳解

    C++中gSOAP的使用詳解

    這篇文章主要介紹了C++中gSOAP的使用詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2021-11-11

最新評論

小金县| 彭州市| 芜湖市| 桐乡市| 灵寿县| 石泉县| 德化县| 赤水市| 武穴市| 常山县| 十堰市| 红桥区| 徐汇区| 芒康县| 平乡县| 宜黄县| 修文县| 罗平县| 温泉县| 朔州市| 辽阳县| 齐河县| 察雅县| 始兴县| 张家界市| 大化| 乌拉特前旗| 玉门市| 琼结县| 来凤县| 伊川县| 仙游县| 合肥市| 襄垣县| 蒙自县| 会同县| 江都市| 多伦县| 麻栗坡县| 石泉县| 讷河市|