• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C语言 > C语言指针数组(数组每个元素都是指针)详解

C语言指针数组(数组每个元素都是指针)详解

作者:匿名 字体:[增加 减小] 来源:互联网 时间:2022-04-30

匿名通过本文主要向大家介绍了等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
如果一个数组中的所有元素保存的都是指针,那么我们就称它为指针数组。指针数组的定义形式一般为:

dataType *arrayName[length];

[ ]的优先级高于*,该定义形式应该理解为:

dataType *(arrayName[length]);

括号里面说明arrayName是一个数组,包含了length个元素,括号外面说明每个元素的类型为dataType *。

除了每个元素的数据类型不同,指针数组和普通数组在其他方面都是一样的,下面是一个简单的例子:
#include <stdio.h>int main(){    int a = 16, b = 932, c = 100;    //定义一个指针数组    int *arr[3] = {&a, &b, &c};//也可以不指定长度,直接写作 int *arr[]    //定义一个指向指针数组的指针    int **parr = arr;    printf("%d, %d, %d\n", *arr[0], *arr[1], *arr[2]);    printf("%d, %d, %d\n", **(parr+0), **(parr+1), **(parr+2));    return 0;}
运行结果:
16, 932, 100
16, 932, 100

arr 是一个指针数组,它包含了 3 个元素,每个元素都是一个指针,在定义 arr 的同时,我们使用变量 a、b、c 的地址对它进行了初始化,这和普通数组是多么地类似。

parr 是指向数组 arr 的指针,确切地说是指向 arr 第 0 个元素的指针,它的定义形式应该理解为int *(*parr),括号中的*表示 parr 是一个指针,括号外面的int *表示 parr 指向的数据的类型。arr 第 0 个元素的类型为 int *,所以在定义 parr 时要加两个 *。

第一个 printf() 语句中,arr[i] 表示获取第 i 个元素的值,该元素是一个指针,还需要在前面增加一个 * 才能取得它指向的数据,也即 *arr[i] 的形式。

第二个 printf() 语句中,parr+i 表示第 i 个元素的地址,*(parr+i) 表示获取第 i 个元素的值(该元素是一个指针),**(parr+i) 表示获取第 i 个元素指向的数据。

指针数组还可以和字符串数组结合使用,请看下面的例子:
#include <stdio.h>int main(){    char *str[3] = {        "c.biancheng.net",        "C语言中文网",        "C Language"    };    printf("%s\n%s\n%s\n", str[0], str[1], str[2]);    return 0;}
运行结果:
c.biancheng.net
C语言中文网
C Language

需要注意的是,字符数组 str 中存放的是字符串的首地址,不是字符串本身,字符串本身位于其他的内存区域,和字符数组是分开的。

也只有当指针数组中每个元素的类型都是char *时,才能像上面那样给指针数组赋值,其他类型不行。

为了便于理解,可以将上面的字符串数组改成下面的形式,它们都是等价的。
#include <stdio.h>int main(){    char *str0 = "c.biancheng.net";    char *str1 = "C语言中文网";    char *str2 = "C Language";    char *str[3] = {str0, str1, str2};    printf("%s\n%s\n%s\n", str[0], str[1], str[2]);    return 0;}
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

相关文章

  • 2017-05-28c++友元函数与友元类的深入解析
  • 2017-05-28如何实现循环队列
  • 2017-05-28浅谈c和c++的某些小区别
  • 2017-05-28VC定时器的用法实例详解
  • 2017-05-28举例讲解C语言程序中对二叉树数据结构的各种遍历方式
  • 2017-05-28如何用C语言去除字符串两边的空字符
  • 2017-05-28基于C语言实现简单的12306火车售票系统
  • 2017-05-28理解C++编程中的std::function函数封装
  • 2017-05-28详解散列表算法与其相关的C语言实现
  • 2017-05-28C语言编写简单的定时关机程序

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • MFC扩展DLL中导出类和对话框的实现方法
    • C++之WSAAsyncSelect模型实例
    • C# interface与delegate效能比较的深入解析
    • 解析C语言中如何正确使用const
    • 基于C语言实现简单的走迷宫游戏
    • c++ int转string方法
    • C++中vector和map的删除方法(推荐)
    • 详解C++编程中的嵌套类的声明与其中的函数使用
    • C/C++产生指定范围和不定范围随机数的实例代码
    • 在VC中隐藏控制台程序窗口的实现代码

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有