指针数组和二级指针

目录

一 指针和数组之间是什么关系?

 二 二级指针

 三 指针数组

1 例一

 2 例二


一 指针和数组之间是什么关系?

指针变量就是指针变量 不是数组 指针变量大小是4/8个字节 专门用来存放地址的

数组就是数组 不是指针 数组依次连续的空间 可以存放一个或者多个类型相同的数据

联系:

数组中, 数组名是数组首元素的地址 数组名 == 地址 == 指针

当我们知道数组首元素地址的时候 因为数组又是连续存放duoy通过指针就可以遍历访问数组

数组是可以通过指针访问的

需要注意的是数组名是首元素地址 但是有两个例外:

sizeof(数组名)这里的数组名表示整个数组,计算的是整个数组的大小

&(数组名) 这里的数组名也表示整个数组,这里取出的是整个数组的地址

 二 二级指针

 int main()
{
       int a = 0;
       int* p = &a;/* p是一级指针变量 指针变量也是变量 变量在内存中是要开辟空间的 是变量就有地址 所以存进了二级指针*/
      
       int** pp = &p;//pp就是二级指针变量,二级指针变量就是用来存放一级指针变量的地址
       return 0;
}

 

 

 三 指针数组

整形数组 --- 存放整形的数组

字符数组 --- 存放字符的数组

指针数组 --- 存放指针(地址)的数组

1 例一

int main()
{
       char arr1[] = "abcdef";
       char arr2[] = "hello world";
       char arr3[] = "cuihua";
       //指针数组
       char* parr[] = { arr1, arr2, arr3 };
       // char ** p = parr;
       int i = 0;
       for (i = 0; i < 3; i++)
       {
              printf("%s\n", parr[i]);// 拿到首元素地址 然后往下打印 遇到\0停止
       }

       /*char arr[] = "abcdef";
       printf("%s\n", arr);*/
       return 0;
}

 

 2 例二

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++)
       {
              int j = 0;
              for (j = 0; j < 5; j++)
              {
                      //printf("%d ", *(parr[i] + j));
                      printf("%d ", parr[i][j]);
              }
              printf("\n");
       }

       return 0;
}

 

 我们可以发现这很像二维数组 但是不是二维数组 因为真实的二维数组是连续的  而这个指针数组是模拟出来的

我觉得这个指针数组还是挺方便的有时候 还是非常有趣的

图书馆要闭馆了 还想继续写一下最近的学习心得 只能留到下一次有时间的时候了

继续加油!

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值