对数组的定义:数组是一个固定长度的存储相同数据类型的数据结构,数组中的元素被存储在一段连续的内存空间中。

格式:

一维数组:数据类型 数组名[数字(包含了几个元素)]={元素,元素,元素,元素....}

int             ar    [    7    ]    =    {0,1,2,3,4,5,6,7}↑               ↑         ↑                        ↑
数组类型       数组名    元素数量                  元素

二维数组:数组类型        数组名[行数][列数]=[{},{},{}.....]

    int     ar    [2][3]    =    {{0,1,2},{10,11,12}};↑       ↑     ↑  ↑                    ↑数组类型  数组名   排 列                 元素

指针的定义:值为内存地址的变量。通常用于指向同类变量的地址。

格式:

指针类型 *指针名;

    int         *b;↑           ↑指针类型   指针变量名

指针运算的使用

取地址运算符&:单目运算符&是用来取操作对象的地址。例:&i 为取变量 i 的地址。对于常量表达式、寄存器变量不能取地址(因为它们存储在存储器中,没有地址)。
指针运算符*(间接寻址符):与&为逆运算,作用是通过操作对象的地址,获取存储的内容。例:x = &i,x 为 i 的地址,*x 则为通过 i 的地址,获取 i 的内容。

//声明了一个普通变量 a
int a;
//声明一个指针变量,指向变量 a 的地址
int *pa;
//通过取地址符&,获取 a 的地址,赋值给指针变量
pa = &a;
//通过间接寻址符,获取指针指向的内容
printf("%d", *pa);
#include<stdio.h>
int main()
{int a=20,b=10;int *x,*y;x=&a;y=&b;printf("占用空间为%d,地址为%#p\n",sizeof(a),&a);printf("占用空间为%d,地址为%#p\n",sizeof(b),&b);printf("a=%d,b=%d\n",*x,*y);printf("a的地址为%#p,b的地址为%#p",x,y);return 0;
}

输出结果为

其中x=&a,y=&b起到了将a,b的地址分别赋给x,y,同时也将a,b的值赋给了*x,*y。

打个比方:

去酒店订了两个房间a,b,门牌号暂时用 x、y 表示
让 10 住进 x,让 20 住进 y
其中门牌号就是 x、y 就是变量的地址
a 和 b 在这里可以理解为具体的房间,房间 a 的门牌号(地址)是 x,房间 b 的门牌号(地址)是 y。而 20 和 10,通过x、y 两个门牌,找到房间,住进 a、b。

由于计算机的硬件指令依赖地址,指针把程序员想要表达的指令以机器的形式表达。因此使用指针的程序更有效率,尤其是处理数组时。

指针数组

定义:是指一个数组里面装着指针,也即指针数组是一个数组,内含指针

int *a[10];    //指针数组的定义形式;

使用


#include <stdio.h>
int main(){int a = 16, b = 932, c = 100;//定义一个指针数组int *arr[3] = {&a, &b, &c};//存放a,b,c的地址//parr 是指向数组 arr 的指针,确切地说是指向 arr 第 0 个元素的指针,//它的定义形式应该理解为int *(*parr),括号中的*表示 parr 是一个指针,括号外面的int *表示 parr 指向的数据的类型。//arr 第 0 个元素的类型为 int *,所以在定义 parr 时要加两个 *。int **parr = arr;printf("%d, %d, %d\n", *arr[0], *arr[1], *arr[2]);//16, 932, 100printf("%d, %d, %d\n", **(parr+0), **(parr+1), **(parr+2));//16, 932, 100return 0;
}

数组指针

定义:是指一个指向数组的指针,它其实还是一个指针,指向数组的指针

int (*p)[10];     //其中,由于[]的优先级高于*,所以必须添加(*p).

使用

一维数组

int main()
{char a[5]={'A','K','C','G','L'};    char (*p)[5]=&a;//&a代表的是整个数组的首地址//char (*p)[5]=a;这样是错误的,因为a代表第一个元素的首地址printf("%c %c %c",**p,*(*p+1),*(*p+3));//输出:A K Greturn 0;
}

二维数组


#include <stdio.h>
int main()
{int a[3][4] = { {0, 1, 2, 3}, {4, 5, 6, 7}, {8, 9, 10, 11} };int(*p)[4];//p指向数组 a 的开头,也即第 0 行;p+1前进一行,指向第 1 行。int i,j;p=a;for(i=0; i<3; i++){for(j=0; j<4; j++) printf("%d  ",*(*(p+i)+j));//*(*(p+i)+j)表示第 i 行第 j 个元素的值。printf("\n");}/*0   1   2   34   5   6   78   9  10  11*/return 0;
}

指针数组和数组指针的区别相关推荐

  1. C语言指针数组与数组指针的区别

    C语言指针数组与数组指针的区别 首先,顾名思义 数组指针是一个指针,是指向一个数组的指针,如 int (a*)[5]:这就是一个指向含有5个元素的数组的指针 指针数组是一个数组,它包含的元素全是指针变 ...

  2. char[]数组与char *指针的区别

    char[]数组与char *指针的区别 问题描述 虽然很久之前有看过关于char指针和char数组的区别,但是当时没有系统的整理,到现在频繁遇到,在string,char[], char *中迷失了 ...

  3. 【C 语言】数组与指针操作 ( 数组符号 [] 与 指针 * 符号 的 联系 与 区别 | 数组符号 [] 与 指针 * 符号 使用效果 基本等价 | 数组首地址 与 指针 本质区别 )

    文章目录 前言 一.数组符号 [] 与 指针 * 符号 使用效果 基本等价 二.数组首地址 与 指针 本质区别 前言 参考 [C 语言]指针 与 数组 ( 指针 | 数组 | 指针运算 | 数组访问方 ...

  4. 指针数组、数组指针、数组的区别与联系

    指针数组.数组指针.数组的区别与联系! 一:基本定义 1.指针数组 char *arr[4] = {"hello", "world", "shannx ...

  5. 如何区别指针数组和数组指针?

    如何区别指针数组和数组指针? 例:下面到底哪个是数组指针,哪个是指针数组呢:  A),int *p1[10];  B),int (*p2)[10]; 答案: (1)对A来说:"[]" ...

  6. 字符串数组 和 字符串指针 的区别

    在C语言中,对字符串的操作主要有两种方式,一是使用字符数组,char str[]:二是使用字符指针.那么二者有什么区别呢?下面将分述二者的使用,最后进行比较. 一.字符数组 使用char str[]定 ...

  7. C语言 指针数组和数组指针区别 - C语言零基础入门教程

    目录 一.简介 1.数组 2.指针 3.指针和数组区别 二.指针数组和数组指针区别 1.指针数组 2.数组指针 三.猜你喜欢 零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> ...

  8. C/C++数组名与指针区别

    C/C++数组名与指针区别 引言 指针是C/C++语言的特色,而数组名与指针有太多的相似,甚至很多时候,数组名可以作为指针使用.于是乎,很多程序设计者就被搞糊涂了.而许多的大学老师,他们在C语言的教学 ...

  9. 神奇的判断数组名和指针的区别

    神奇的判断数组名和指针的区别 代码 代码 傻傻的区分不清楚数组名和指针的区别,下面的代码可以证明指针和数组名其实不是一个东西: // An highlighted block #include< ...

  10. 指针数组与数组指针的区别

    指针数组 在C语言和C++语言中,数组元素全为指针的数组称为指针数组. 一维指针数组的定义形式为:"类型名 *数组标识符[数组长度]". 例如,一个一维指针数组的定义:int *p ...

最新文章

  1. ASP.NET Web API 实现客户端Basic(基本)认证 之简单实现
  2. 无限互联新浪微博项目(视频)分享
  3. 【指标统计】删除失败遥控
  4. PHP获取当前页面的网址
  5. Cython入门.VS.C++
  6. 激情巴布部落畅快一日游
  7. aspen稳态导出动态_Aspen Dynamic 针对精馏塔的模拟设计过程详解 | APP技术稿第1期...
  8. Docker下centos7镜像安装中文支持
  9. 用Python做数据分析之数据处理及数据提取
  10. 编写测试用例的基本方法之边界值
  11. 三星emmc芯片手册_eMMC详细介绍
  12. Java Client Of Apache Atlas
  13. 帝国cms如何导入php模板,帝国cms模板导入导出及模板组功能介绍
  14. 实现图的邻接矩阵和邻接表的存储
  15. Excel_VBA_编程教程(完整版)
  16. 交互式语音应答(IVR)系统行业调研报告 - 市场现状分析与发展前景预测(2021-2027年)
  17. 基于canoe 新建一个lin工程_基于CANoe的车身控制器CAN/LIN网络设计方法
  18. 有关于操作系统下载的方法(免费)
  19. 医疗器械中的大C中C小C
  20. word查找替换正则式的一例

热门文章

  1. js取整数、取余数的方法总结
  2. 爬虫实战——求是网周刊文章爬取(一)and 爬虫基本原理
  3. python函数操作_python_函数的基本操作
  4. 阴阳师守护契约活动该怎么玩 守护契约活动玩法攻略
  5. 【矩阵论笔记】线性变换的特征值和特征向量(几何重数和代数重数)
  6. 嵌入式开发 | 嵌入式系统抗干扰设计
  7. c# 逐行写txt_C#读写TxT文件
  8. 基于泰山服务器的CentOS Linux release 7.6.1810 (AltArch) 安装zabbix
  9. 微信公众号2017年发展趋势分析解读
  10. r75800h核显相当于什么显卡