目录

0、指针的概念

1、字符指针

2、指针数组

3.数组指针


0、指针的概念

1.指针就是个变量,用来存放地址,地址唯一表示一块内存空间。

2.指针的大小是固定的4/8个字节(32位平台/64位平台)

3.指针是有类型,指针的类型决定了指针的+ - 整数的步长,指针解引用操作的权限

4.指针的运算

1、字符指针

int mian()
{char ch = 'w';char *pc = &ch;*pc = 'w';return 0;
}

或者

int main()
{const char *pstr = "hello";//pstr存的是字符串首字母地址return 0;
}

面试题:

#include<stdio.h>int main()
{char str1[][]="hello";char str2[][]="hello";const char *str3="hello";const char *str4="hello";if(str1==str2)printf("str1==str2");elseprintf("str1!=str2");if(str3==str4)printf("str3==str4");elseprintf("str3!=str4");
}

两个数据内容相同内容的数组不共用内存,字符指针则是共用一个内存。

2、指针数组

指针数组是用来存放指针的数组

int arr[10];整形数组

char ch[5]; 字符数组

指针数组

int * arr2[6];存放整形指针的数组

char *arr3[5];存放字符指针的数组

3.数组指针

数组指针是指向数组的指针

int *p1[10];//指针数组
int (*p2)[10];//数组指针

p2是数组指针,p2可以指向一个数组,该数组有10个元素,每个元素都是int 类型

int (*p)[10];

解释:p先和*结合,说明p是一个指针变量,然后指着指向的是一个大小为10个整形的数组。所以p是一个指针,指向一个数组,叫数组指针。

这里要注意:[ ]的优先级要高于*号的,所以必须加上( )来保证p先和*结合

3.2&数组名与数组名

int arr[10]={0};
1、printf("%p",arr);
2、printf("%p",&arr[0]);
3、printf("%p",&arr);
4、int sz=sizeof(arr);

1、2、3三个地址打印是一样的

4、打印出来是40,表明arr是表示整个数组

数组名通常表示的都是数组首元素的地址,但是有2个例外:

1、sizeof(数组名)

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

2、&数组名

这里的数组名表示的依然是整个数组,所以&数组名取出的是整个数组的地址。

printf("%p",arr);
printf("%p",arr+1);printf("%p",&arr[0]);
printf("%p",&arr[0]+1);printf("%p",&arr);
printf("%p",&arr+1);

实际上:

&arr表示的是数组的地址,而不是数组首元素的地址。

3.3数组指针的使用

常见用法:

int arr[3][5] = {1,2,3,4,5,2,3,4,5,6,3,4,5,6,7};
print1(arr,3,5);
print2(arr,3,5);
void print1(int arr[3][5],int r,int c)
{int i=0;for(i=0;i<r;i++){int j=0;for(int j=0;j<c;j++){printf("%d",arr[i][j]);}}
}
void print2(int (*p)[5],int r,int c)
{int i=0;for(i=0;i<r;i++){int j=0;for(int j=0;j<c;j++){printf("%d",*((p+i)+j));}}
}

其中print2(arr,3,5);//arr代表数组一行的地址

问题:

int arr[5];

int *parr[10];

int (*parr2)[10];

int (*parr3[10])[5];

int arr[5];整形数组

int *parr[10];指针数组

int (*parr2)[10];数组指针

int (*parr3[10])[5];存放指针数组的指针

关于int(*parr3[10])[5]的图解:

C进阶(2)指针的进阶(1)相关推荐

  1. 【C语言进阶】指针(进阶2)

    目录 回顾: 数组参数.指针参数 一维数组传参 二维参数传参 一级指针传参 二级指针传参 回顾: 前面关于指针的内容我们已经学习了指针数组和数组指针我们来一起看看下面的代码的意思 int arr[5] ...

  2. C语言程序设计 | 指针的进阶(一):字符指针、数组指针、指针数组、函数指针

    指针的进阶(一)目录: 字符指针 数组指针和指针数组 函数指针 字符指针 在开始讲解这一章节之前,我们需要了解指针前面声明的类型的意义 类型 * 指针名 对于指针来说,我们在给指针进行声明时,我们声明 ...

  3. [C语言简明教程] 指针的进阶(上)

    文章目录 前言 一.指针是什么? 二.指针的进阶 1. 字符指针 2.指针数组 3.数组指针 3.1数组指针定义 3.2 &数组名 和 数组名 3.3 数组指针的使用 4. 数组参数.指针参数 ...

  4. [C语言简明教程] 指针的进阶(下)

    文章目录 前言 一.函数指针 二.函数指针数组 三.回调函数 总结 前言 C语言中指针的重要性是:通过指针不仅可以对数据本身,还可以对存储数据的变量地址进行操作.指针能够帮助我们快速地传递数据,减少内 ...

  5. C语言——指针(进阶版)

                            目录 指针的进阶 1.字符指针 2.指针数组 3.数组指针 3.1 数组指针的定义 3.2数组指针的使用 4.动态内存分配与指向它的指针变量 4.1 什 ...

  6. C语言进阶——函数指针

    作者:敲代码の流川枫 博客主页:流川枫的博客 专栏:C语言从入门到进阶 语录:Stay hungry stay foolish 工欲善其事必先利其器,给大家介绍一款超牛的斩获大厂offer利器--牛客 ...

  7. c语言2阶数组指针,C语言的指针(进阶篇章之二)

    指针遇到数组,不得不说的"秘密" 说起数组array[i]来,我们都知道:数组名"array"是数组的唯一标识符,数组名代表数组首元素的地址. 而今天的主角-- ...

  8. C/C++ 进阶 —— 指向指针的指针

    1. 指向指针的指针的应用场景 指针的指针可以存储结点指针的数组: 2. 简单举例 与某块内存的值(int a = 10;),某块内存的地址(int *p = &a;),二者是没有关系的,也即 ...

  9. 【C语言-进阶】指针进阶(2)

    继上一篇的数组指针,简单描述:数组指针就是指向数组的指针,二维数组传参时,传递的是第一个一维数组的地址,所以可以用指向一维数组的指针来接收. 1:整型数组 2:整型指针的数组 3.数组指针,所指向的数 ...

最新文章

  1. 当老板说要把公司当家时,他在说...
  2. BZOJ 4152: [AMPPZ2014]The Captain(最短路)
  3. 前端监控和前端埋点方案设计--摘抄
  4. linux ftp 工作过程,linux中ftp的安装过程记录[运维篇]
  5. AppleScript
  6. 【并查集】【图论】【最小生成树】剑鱼行动(ssl 1618)
  7. 前端学习(1541):本地运行ng文档
  8. MySQL 中日志的面试题总结
  9. oracle undo段的作用,Oracle数据库中Undo数据段的作用及类型
  10. centOS下lnamp安装
  11. php xingnengfenxi_php代码性能分析方法
  12. 埃氏筛 线性筛(欧拉筛) 算法解析
  13. 工作中的一点小技巧总结
  14. android图片根据屏幕适配
  15. 永洪BI到底有多好用?知乎大V用3000字力荐
  16. 医疗器械软件网络安全法规和标准概述(本文末付本文提到的所有标准)
  17. 单播、广播和多播IP地址
  18. 格林第一季/全集Grimm迅雷下载
  19. MyBatis注解开发方式
  20. can转光纤 海上风电消防火灾报警系统中消防主机超远距离联网方案

热门文章

  1. 通信、电子保研经验贴,北京理工大学+中国科学院大学空天所
  2. pgsql 常用命令
  3. 你是否对软件确认测试有了解,如何获取软件确认测试报告?
  4. ieee sci 期刊 写作经验 分享 博士发展阶段
  5. 苹果iPhone5 16G长沙九方现货售8199元
  6. C语言字符串去空格(最简单版本)
  7. 可以作为艺术作品欣赏的CT三维重建技术。
  8. 三星手机 qq上通过我的设备我的android上传到手机的东西,两个手机怎么互传文件?...
  9. Python Module — OpenAI ChatGPT API
  10. 微信小程序实现运动步数排行(可删除)