指针数组与数组指针 指针函数与函数指针 的区别

 指针数组与数组指针 

指针数组

指针数组是一个数组,数组的元素保存的是指针;

数组指针

数组指针是一个指针,该指针指向的是一个数组;

#include 

#define SIZE 5

int main(int argc, char const *argv[])
{
	int arry[5]  = {1,2,3,4,5};
	int (*p)[SIZE] =  &arry ; //数组指针,该指针指向一个数组;
	for(int i = 0 ; i < SIZE ; i++)
	{
		arry[i] = (i + 1) * 10 ;
		printf("%d:%d\n",(*p)[i],*(p[i]));
		printf("%p\t%p\t%p\t%p\n",&(p[i]),p[i],&(*p)[i],&(arry[i]));
	}
	printf("\n\n\n");
	int *p1[SIZE] = {nullptr,nullptr,nullptr,nullptr,nullptr} ; //指针数组;
	
	p1[0] = arry; //p1[[0]是一个指针;
	//p[0] = arry ; 语法错误 p[0]是一个数组;
	
	for(size_t i = 1 ;i < SIZE ; i++)
	{
		p1[i] = new int[SIZE] ;
		for(int j = 0 ; j < SIZE ; j++)
		{
			p1[i][j] = i * (j + 1);
		}
	}

	for(size_t i = 0 ;i < SIZE ; i++)
	{
		for(size_t j = 0 ; j < SIZE ; j++)
		{
			printf("%p:%d\t",&p1[i][j],p1[i][j]);
		}
		printf("\n%d:%d\n",(*p)[i],*(p[i]));
		printf("%p\t%p\t%p\t\n\n",&(p1[i]),p1[i],&(*p1)[i]);
	}
}

指针函数与函数指针

指针函数

指针函数是一个函数,该函数返回的是一个指针;

函数指针

函数指针是一个指针,该指针指向一个函数;

#include 

int* getIntPoint(const int a) //指针函数,是一个函数 返回一个指针;
{
	int *p = nullptr ;
	p = new int ;
	*p = a; 
 	return p ;
}


int main(int argc, char const *argv[])
{
	int *(*p)(int)  = getIntPoint ; //函数指针,该指针指向一个函数;
	int* pInt = p(5); //使用函数指针;
	printf("%d\n",*pInt);
	delete pInt ;
	return 0;
}

 

你可能感兴趣的:(c++)