当前位置: 首页 > news >正文

指针初阶(2)

文章目录

    • 5. 指针和数组
    • 6. 二级指针
    • 7. 指针数组
  • 附:

5. 指针和数组

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

数组:数组就是数组,不是指针,数组是一块连续的空间,可以存放1个或者多个类型相同的数据。

两者之间的联系:

数组中,数组名其实是数组首元素的地址,数组名 == 地址 == 指针
当我们知道数组首元素的地址的时候,因为数组又是连续存放的,所以通过指针就可以遍历访问数组
数组是可以通过指针来访问的

#include <stdio.h>int main()
{int arr[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };int i = 0;int sz = sizeof(arr) / sizeof(arr[0]);int* p = arr;for (i = 0; i < sz; i++){//printf("%p == %p\n", p + i, &arr[i]);printf("%d ", *(p + i));}return 0;
}

6. 二级指针

指针变量也是变量,是变量就有地址,那指针变量的地址存放在哪里?
这就是二级指针。

#include <stdio.h>int main()
{int a = 10;int* p = &a;//p是一级指针变量,指针变量也是变量,变量是在内存中开辟空间的,是变量就有地址int** pp = &p;//pp就是二级指针变量,二级指针变量就是用来存放一级指针变量的地址//*(*pp) = 100;**pp = 100;printf("%d\n", a);//int** * ppp = &pp;return 0;
}

举个例子:

int main()
{char arr1[] = "abcdef";char arr2[] = "hello world";char arr3[] = "cuihua";char* parr[] = { arr1, arr2, arr3 };char** p = parr;return 0;
}

7. 指针数组

指针数组是指针还是数组?
答案:是数组,是存放指针的数组。

数组我们已经知道整形数组,字符数组,那指针数组是怎样的?

#include <stdio.h>int main()
{char arr1[] = "abcdef";char arr2[] = "hello world";char arr3[] = "cuihua";//指针数组char* parr[] = { arr1, arr2, arr3 };int i = 0;for (i = 0; i < 3; i++){printf("%s\n", parr[i]);}/*char arr[] = "abcdef";printf("%s\n", arr);*/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++){int j = 0;for (j = 0; j < 5; j++){printf("%d ", parr[i][j]);//printf("%d ", *(parr[i] + j));//和上面等价}printf("\n");}return 0;
}

附:

指针初阶(1)

http://www.lryc.cn/news/119619.html

相关文章:

  • 基于Gradio的GPT聊天程序
  • 包管理工具详解npm 、 yarn 、 cnpm 、 npx 、 pnpm(2023)
  • Terraform 系列-批量创建资源时如何根据某个字段判断是否创建
  • Android侧滑栏(一)可缩放可一起移动的侧滑栏
  • 简单程度与自负是否相关?探索STM32的学习价值
  • 第二章:CSS基础进阶-part3:弹性例子布局
  • 函数与方法有区别?
  • VMware vCenter忘记密码操作,和Linus原理一致
  • Bert详细学习及代码实现详解
  • Vue [Day7] 综合案例
  • 基于R做宏基因组的进化树ClusterTree分析
  • 栈和队列修炼指南(基本操作+OJ练习)
  • 伪类和伪元素有何区别?
  • 自动测试框架airtest应用一:将XX读书书籍保存为PDF
  • ValueError:The following settings are not supported :{‘username‘: ‘neo4j“}
  • 360安全卫士右下角广告弹窗太多怎么彻底关闭?
  • 链表有无环以及确定入环口详解
  • chrome插件开发实例08- 使用Vue.js开发chrome插件
  • PCL 计算外接圆的半径
  • Matlab实现神经网络SOM算法(附上完整仿真源码)
  • 【遍历】非递归法 二叉树的前中后序遍历
  • Python将tiff转换成png
  • 【大数据】-- 部署 Flink kubernetes operator
  • 能够完成两个数的算术运算的单地址指令,地址码指明一个操作数,另一个操作数来自( )方式
  • 数据库数据恢复-Oracle数据库数据恢复案例
  • 对于msvcr120.dll丢失的问题,分享几种解决方法
  • 网络安全进阶学习第十三课——SQL注入Bypass姿势
  • vue3 provide inject实现强制刷新
  • Neo4j笔记-数据迁移(导出/导入)
  • 请求转发和请求重定向