指针数 是数组 用来存放指针
#include <stdio.h>
int main()
{
int arr[10] = {0};//整型数组
char ch[5] = { 0 };//字符数组
int* parr[4];//存放整型指针的数组 - 指针数组
char* pch[6];//存放字符指针的数组 - 指针数组
return 0;
}
#include <stdio.h>
int main()
{
int arr1[] = {1,2,3,4,5};
int arr2[] = {2,3,4,5,6};
int arr3[] = {3,4,5,6,7};
int* parr[]= {arr1,arr2,arr3};
int i = 0;
for(i = 0;i <3 ;i++){//parr[i]存放首字母的地址 +j 向后偏移j个位子
int j = 0;
for(j = 0;j < 5;j++)
{
printf("%d",*(parr[i] + j));
}
printf("\n");
}
return 0;
}
#include <stdio.h>
int main()
{
char* arr[5];//指针数组
char* (*pa)[5] = &arr;
return 0;
}
指针数组取&获取到地址
地址应该存到指针里
pa是指针变量的名字
*提示是个指针
[5] pa指向的数组是5个元素
char*为pa指向的数组的元素类型
#include <stdio.h>
int main()
{
int arr[10] = { 0 };
printf("arr = %p\n",arr);
printf("&arr = %p\n",&arr);
printf("arr + 1= %p\n",arr+1);
printf("&arr + 1= %p\n",&arr+1);
return 0;
}
&arr 表示的是数组的地址 不是首元素的地址
数组的地址+1 跳过整个数组大小 所以&arr + 1相对于 &arr差值为40
arr 是数组名 表示数组首元素地址 所以与arr+ 1 差值为一个元素
- 输出结果如下
- 指针使用:
这几种形式都是相同含义
- 小例题:
int arr[5];//数组 5个元素 每个元素是整型
int *parr1[10]; //parr1是指针数组
int (*parr2)[10]; //parr2是数组指针 指向10个整型元素的数组
int (*parr3[10])[5];//parr3是一个数组(方块优先级高 )该数组有10 元素 每个元素是一个数组指针 数组指针指向的数组有5个元素 每个元素是整型