C基础(七) 指针和二维数组、数组指针
指针和二维数组
- 一级指针与二维数组:一级指针无法直接指向二维数组,原因是偏移量不一致,可操作空间不同。二维数组的数组名是行指针,指向一行元素;对二维数组的数组名取一次
*
,降维成列指针,指向单个元素的地址。例如int arr[2][3]
,arr
是行指针,*arr
是列指针,**arr
是元素。#include <stdio.h> int main(int argc, const char *argv[]) { int arr[2][3]={23,13,8,34,9,2}; int arr1[4]={1,9,4,2}; printf("arr=%p\tarr+1=%p\n",arr,arr+1); //偏移量是12 printf("arr1=%p\tarr1+1=%p\n",arr1,arr1+1); //偏移量是4 int *p=arr; //让int*类型的指针指向二维数组,因为偏移量不一致会报警告 printf("p=%p\tp+1=%p\n",p,p+1); return 0; }
数组指针
- 数组指针本质:本质是一个指针,作为指针的优先级更高。定义格式为:数据类型 (
*变量名
)[数组中元素的个数]。 - 与二维数组的关系:由于数组指针和二维数组的偏移量都是一整行元素,所以数组指针可以直接指向二维数组。
- 代码示例(部分):
#include <stdio.h> int main(int argc, const char *argv[]) { int *p; //int char *p1; //char float *p2; //float double *p3; //double printf("arr=%p\tarr+1=%p\n", arr, arr + 1); // 偏移量是12 return 0; }