指针数组与数组指针
指针数组
指针数组是一个数组,数组的元素保存的是指针;
数组指针
数组指针是一个指针,该指针指向的是一个数组;
#include <stdio.h>
#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 <stdio.h>
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;
}