IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 指针数组和数组指针 -> 正文阅读

[C++知识库]指针数组和数组指针

前言

大家好,我是小昭,这次分享下指针数组和数组指针应用与区别,对于C语言基础非常重要的。

目录

  • 什么是指针数组?
  • 什么是数组指针?
  • 怎么区分指针数组和数组指针?
  • 指针数组使用
  • 数组指针应用

什么是指针数组?

首先,它是一个数组,这个数组里的元素存放的是指针,比如int **p[5],表示申请了5个元素大小的数组且存放的元素数据类型是int **。

什么是数组指针?

首先是 ,它是一个指针,指针指向的类型是数组类型,比如int (*p)[5],int ptr[5],

p = &ptr;

怎么区分指针数组和数组指针?

我们先看C语言运算符

int *p[10],[的优先级比**大,所以[]先和p结合,所以是数组变量;int( p)[10],()和[]优先级一样,既然一样,我们就从左往右看,*和p先结合,所以是指针。运算符优先级差别,导致变量表示意义会有差别。

补充:++i的运算符优先级是1,i++的运算符优先级是2,所以才有差异。

指针数组使用

char* p[3] = {“xiao”,“zhao”,“debug”};

**p存放“xiao”字符串的地址,**p = p[0],*(p+1)存放“zhao”字符串的地址,*(p+1)=p[1]。

打印字符串

int len = sizeof(p)/8;//64位系统环境。一个指针占8个字节。
for(int i = 0;i < len;i++)
  printf("%s ",p[i]);

假如说,我想读取第三个字符串中第二个字符怎么访问,也就是“debug”中的e,怎么去读?

我们可以进行类比,

假如char str[] = “debug”, 那么str是地址, str[1]=*(str+1),就可以访问到第二字符。

char* p[3] = {“xiao”,“zhao”,“debug”}; 那么“debug”地址就是p[2]或者*(p+2),类似上面一样操作。

p[2][1]或者*(* (p+2)+1),将p[2]和*(p+2)互换,可以是*(p[2]+1)或者(*(p+2))[1],一共四种表达方式。

抛出一个疑问,sizeof§ = ?

我们都知道指针数组是数组,既然是数组,就要知道数组有多少元素,一个元素占多大空间,OK,概念清晰就可以计算,有三个元素,元素的类型是指针,指针的大小是4个字节(32位机),所以sizeof§ = 12。

是否能修改“debug”字符串中的‘e’字符?

将‘e’改成‘A’,p[2][1] = “A”。先说结论,这样操作是非法的,不允许这样操作。

因为这部分的字符串是存储在只读存储区,就是字符常量区,只允许被读取。

数组指针应用场景

linux终端命令传参

#include <stdio.h>
int main(int argc, char** argv)// char** argv 约等于 char* argv[]
{
    if (argc < 2)
    {
        printf("please input arguments.\n");
        return -1;
    }
    for (int i = 1; i < argc; i++) 
        printf("%s ", argv[i]);
    printf("\n");
    return 1;
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-exQMYUFq-1652171305939)(image/image_XI6Pm8DuK1.png)]

数组指针应用

指针指向数组:

char str[] = "hello";
char *ptr = str;

数组指针,指向数组整体类型(char [4])的指针,等价于存放的是数组的地址:

char (*p)[4];
char str[4];p = &str;

数组指针指向二维数组:

int main(int argc, char** argv)
{
    char buf[3][4] = {"123","456","789"};
    char (*p)[4];//数组指针p,指针步长4个char,即4位。
    int i=0;
    p = buf;
    while(i<3)
    {
        //printf("%c ",(*p)[i]);//指针没有变,步长是1

        printf("%c ",(*p++)[0]);//指针每加1,位移4个长度
        i++;
    }
    return 0;
}

以上是个人总结,有疑问随时欢迎联系我,我是 小昭debug。

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-05-12 16:18:51  更:2022-05-12 16:19:32 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 18:33:53-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码