指针数组和数组指针的区别
对数组的定义:数组是一个固定长度的存储相同数据类型的数据结构,数组中的元素被存储在一段连续的内存空间中。
格式:
一维数组:数据类型 数组名[数字(包含了几个元素)]={元素,元素,元素,元素....}
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;
}
指针数组和数组指针的区别相关推荐
- C语言指针数组与数组指针的区别
C语言指针数组与数组指针的区别 首先,顾名思义 数组指针是一个指针,是指向一个数组的指针,如 int (a*)[5]:这就是一个指向含有5个元素的数组的指针 指针数组是一个数组,它包含的元素全是指针变 ...
- char[]数组与char *指针的区别
char[]数组与char *指针的区别 问题描述 虽然很久之前有看过关于char指针和char数组的区别,但是当时没有系统的整理,到现在频繁遇到,在string,char[], char *中迷失了 ...
- 【C 语言】数组与指针操作 ( 数组符号 [] 与 指针 * 符号 的 联系 与 区别 | 数组符号 [] 与 指针 * 符号 使用效果 基本等价 | 数组首地址 与 指针 本质区别 )
文章目录 前言 一.数组符号 [] 与 指针 * 符号 使用效果 基本等价 二.数组首地址 与 指针 本质区别 前言 参考 [C 语言]指针 与 数组 ( 指针 | 数组 | 指针运算 | 数组访问方 ...
- 指针数组、数组指针、数组的区别与联系
指针数组.数组指针.数组的区别与联系! 一:基本定义 1.指针数组 char *arr[4] = {"hello", "world", "shannx ...
- 如何区别指针数组和数组指针?
如何区别指针数组和数组指针? 例:下面到底哪个是数组指针,哪个是指针数组呢: A),int *p1[10]; B),int (*p2)[10]; 答案: (1)对A来说:"[]" ...
- 字符串数组 和 字符串指针 的区别
在C语言中,对字符串的操作主要有两种方式,一是使用字符数组,char str[]:二是使用字符指针.那么二者有什么区别呢?下面将分述二者的使用,最后进行比较. 一.字符数组 使用char str[]定 ...
- C语言 指针数组和数组指针区别 - C语言零基础入门教程
目录 一.简介 1.数组 2.指针 3.指针和数组区别 二.指针数组和数组指针区别 1.指针数组 2.数组指针 三.猜你喜欢 零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> ...
- C/C++数组名与指针区别
C/C++数组名与指针区别 引言 指针是C/C++语言的特色,而数组名与指针有太多的相似,甚至很多时候,数组名可以作为指针使用.于是乎,很多程序设计者就被搞糊涂了.而许多的大学老师,他们在C语言的教学 ...
- 神奇的判断数组名和指针的区别
神奇的判断数组名和指针的区别 代码 代码 傻傻的区分不清楚数组名和指针的区别,下面的代码可以证明指针和数组名其实不是一个东西: // An highlighted block #include< ...
- 指针数组与数组指针的区别
指针数组 在C语言和C++语言中,数组元素全为指针的数组称为指针数组. 一维指针数组的定义形式为:"类型名 *数组标识符[数组长度]". 例如,一个一维指针数组的定义:int *p ...
最新文章
- ASP.NET Web API 实现客户端Basic(基本)认证 之简单实现
- 无限互联新浪微博项目(视频)分享
- 【指标统计】删除失败遥控
- PHP获取当前页面的网址
- Cython入门.VS.C++
- 激情巴布部落畅快一日游
- aspen稳态导出动态_Aspen Dynamic 针对精馏塔的模拟设计过程详解 | APP技术稿第1期...
- Docker下centos7镜像安装中文支持
- 用Python做数据分析之数据处理及数据提取
- 编写测试用例的基本方法之边界值
- 三星emmc芯片手册_eMMC详细介绍
- Java Client Of Apache Atlas
- 帝国cms如何导入php模板,帝国cms模板导入导出及模板组功能介绍
- 实现图的邻接矩阵和邻接表的存储
- Excel_VBA_编程教程(完整版)
- 交互式语音应答(IVR)系统行业调研报告 - 市场现状分析与发展前景预测(2021-2027年)
- 基于canoe 新建一个lin工程_基于CANoe的车身控制器CAN/LIN网络设计方法
- 有关于操作系统下载的方法(免费)
- 医疗器械中的大C中C小C
- word查找替换正则式的一例
热门文章
- js取整数、取余数的方法总结
- 爬虫实战——求是网周刊文章爬取(一)and 爬虫基本原理
- python函数操作_python_函数的基本操作
- 阴阳师守护契约活动该怎么玩 守护契约活动玩法攻略
- 【矩阵论笔记】线性变换的特征值和特征向量(几何重数和代数重数)
- 嵌入式开发 | 嵌入式系统抗干扰设计
- c# 逐行写txt_C#读写TxT文件
- 基于泰山服务器的CentOS Linux release 7.6.1810 (AltArch) 安装zabbix
- 微信公众号2017年发展趋势分析解读
- r75800h核显相当于什么显卡