C语言--指针数组和数组指针

时间:2022-05-07 16:45:59
<pre name="code" class="cpp">#include <stdio.h>
//指针数组 
int main(int argc, const char *argv[])
{
	int a = 10;
	int b = 20;
	int c[5] = {0,1,2,3,4};
	
	//指针数组,本质是数组,元素是指针类型

    //申明一个大小为3的指针数组 
	int *p[3]; 						
	p[0] = &a;  //给第一个元素赋值变量a的地址 
	p[1] = &b;  //给第二个元素赋值变量a的地址 
	p[2] = &c[1];//给第三个元素赋值数组c的第二个元素的地址 
	
	printf("a     = %d\n",a); //10 
	printf("*p[0] = %d\n",*p[0]);//获取指针数组第1个元素的值(内存地址) 并获取该内存地址对应的值 10
	printf("b     = %d\n",b);//20
	printf("*p[1] = %d\n",*p[1]);//获取指针数组第1个元素的值(内存地址) 并获取该内存地址对应的值 20 

	printf("*c[3]     = %d\n",c[3]); //数组变量C向前移动三个单位  并取值   3
	printf("*(p[2]+2) = %d\n",*(p[2]+2));//指针数组向前移动2个单位并取值(该值为内存地址),再向前移动两个单位 取值  3
	printf("p[2][2]   = %d\n",p[2][2]);  //同上 3 
	return 0;
}
 

#include <stdio.h>
//数组指针 
int main(int argc, const char *argv[])
{
	int a[3][4] = {{0,1,2,3},
				   {4,5,6,7},
				   {8,9,10,11}};

//定义一个数组指针,并赋值 
	int (*p)[4] = a;

//以数组变量来取值 
	printf("%d\n",a[1][2]);
	printf("%d\n",*(a[1]+2));
	printf("%d\n",*(*(a+1)+2));

//以指针变量来取值 
	printf("%d\n",p[1][2]);
	printf("%d\n",*(p[1]+2));
	printf("%d\n",*(*(p+1)+2));
	
//	int b[4] = {10,11,12,13}; 				
//	p = &b; //也可以指向一维数组
	return 0;
}