C語言進階(牟海軍)C 語言指針理解 續

上一篇講到了指針的理解,現在我們講述一下指針的指針的概念,指針的指針用到最多的就是二維數組的概念了

給個例子

#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <time.h>
int main()
{
	srand(time(0));
	int **a;
	int row,col;
	printf("please input a row:\n");
	scanf("%d",&row);
	printf("please input a col:\n");
	scanf("%d",&col);
	a = (int **)malloc(sizeof(int *)*row);
	for (int i=0;i<row;i++)
	{
		a[i] = (int *)malloc(sizeof(int)*col);
	}
	for (int i=0;i<row;i++)
	{
		for (int j=0;j<col;j++)
		{
			a[i][j] = rand()%100;
		}
	}
	printf("the array number is:\n");
	for (int i=0;i<row;i++)
	{
		for (int j=0;j<col;j++)
		{
			printf("%d\t",a[i][j]);
		}
		printf("\n");
	}
	int **p = (int **)malloc(sizeof(int *)*row);//指針數組
	for (int i=0;i<row;i++)
	{
		p[i] = a[i];
	}
	printf("指針數組:\n");
	for (int i=0;i<row;i++)
	{
		for (int j=0;j<col;j++)
		{
			printf("%d\t",*(p[i]+j));
		}
		printf("\n");
	}
	//int (*p)[]
	int **q = (int **)malloc(sizeof(int *)*row);//指針數組
	q = a;
	printf("數組指針:\n");
	for (int i=0;i<row;i++)
	{
		for (int j=0;j<col;j++)
		{
			printf("%d\t",*(*(p+i)+j));
		}
		printf("\n");
	}
	system("pause");
	return 0;
}

二維數組的初始化就不用說了

現在講一下指針數組和數組指針

指針數組的定義是

類型名 *數組名【數組長度】

int *p[8]

數組指針的定義是

類型名 (*指針名)【數組長度】

int (*p)[8]

指針數組相當於定義了一個8個整形的指針變量,用於存放地址單元,本質是數組

數組指針本質是指針,該指針指向的是有8個整形元素的數組

發佈了105 篇原創文章 · 獲贊 10 · 訪問量 20萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章