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万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章