C语言 显示数组元素的值和地址
#include <stdio.h>int main(void){int i;int a[5] = {1, 2, 3, 4, 5};int *p = a; // p指向a[0]for(i = 0; i < 5; i++){printf("a[%d] = %d *(a + %d) = %d | p[%d] = %d *(p + %d) = %d\n", i, a[i], i, *(a + i), i, p[i], i, *(p + i));}for(i = 0; i < 5; i++){printf("a[%d] = %p a + %d = %p | &p[%d] = %p p + %d = %p\n", i, &a[i], i, (a + i), i, &p[i], i, (p + i));}
}
运行结果:
#include <stdio.h>int main(void){int i;int a[5] = {1, 2, 3, 4, 5};int *p = &a[2]; // p指向a[2]for(i = 0; i < 5; i++){printf("a[%d] = %d *(a + %d) = %d\n", i, a[i], i, *(a + i));}puts("----------------------------------------------------------");for(i = -2; i < 3; i++){printf("p[%d] = %d *(p + %d) = %d\n", i, p[i], i, *(p + i));}puts("----------------------------------------------------------");puts("----------------------------------------------------------");for(i = 0; i < 5; i++){printf("a[%d] = %p a + %d = %p \n", i, &a[i], i, (a + i));}puts("----------------------------------------------------------");for(i = -2; i < 3; i++){printf("&p[%d] = %p p + %d = %p\n",i, &p[i], i, (p + i));}}
运行结果:
数组正确指向数组中的元素
int a[5] = {1, 2, 3, 4, 5};
int *p = a; // p指向a[0]
数组错误指向数组中的元素
int a[5] = {1, 2, 3, 4, 5};
int *p = a[2]; // 无法赋值
因为:a[2]的类型是int,而p的类型是int *,两者不同,不能相互赋值!
在以下两种情况下,数组名不会被视为指向其实元素的指针。
- 作为 sizeof 运算符的操作数出现时
sizeof(数组名)不会生成指向起始元素的指针的长度,而是生成数组整体的长度。 - 作为取址运算符 & 的操作数出现时
& 数组名不是指向起始元素的指针的指针,而是指向数组整体的指针。
如果在指向数组内元素的指针p + i 前写上指针运算符 *,会变成什么情况呢?
因为 p + i 是指向 p 所指元素后第 i 个元素的指针,所以在其前加上指针运算符后得到的 *(p + i)就是该元素的别名。因此,如果p指向a[0],那么表达式 *(p + i)就表示a[i]本身。
总结:
- 指针 p 指向数组中的元素e时,
指向元素 e 后第 i 个元素的 *(p + i),可以写为p[ i ]。
指向元素 e 前第 i 个元素的 *(p - i),可以写为p[-i]。 - 数组a的元素个数为n时,构成数组a的元素是a[0]到a[n-1],共“n个”。但是,指向数组元素的指针,则可以是&a[0]到&a[n],共“n + 1”个。之所以会出现这种情况,是因为在对遍历数组元素的结束条件(是否达到了末尾)进行判定时,如果可以利用指向末尾元素后一个元素的指针的话将会非常方便。
- Type* 型指针 p 指向 Type型数组 a 的起始元素a[0]时,指针 p 的行为就和数组 a 本身一样。
- 数组的下标表示位于起始元素后的第几个元素的位置,因此必须从0开始。
注意:
- 虽然可以为指针加上整数,但是指针之间相减是不可以的。
- 指针之间做减法是可以的。
数组正确的赋值示例
int *p
int x[5];
p = x; // 正确的赋值
数组错误的赋值示例
int a[3]
int b[3];
a = b; // 错误的赋值
赋值表达式的左操作数不可以是数组名。
准确来说是 不可使用赋值运算符改变指向数组起始元素的指针。
C语言 显示数组元素的值和地址相关推荐
- 动态二维数组外圈元素值的和_C语言 | 用指向元素的指针变量输出二维数组元素的值...
例33:有一个3*4的二维数组,要求用C语言实现指向元素的指针变量输出二维数组个元素的值. 解题思路:二维数组的元素时整型的,它相当于整型变量,可以用int*型指针变量指向它.二维数组的元素在内存中是 ...
- 790-C语言的数组元素下标为何从0开始?
C语言的数组元素下标为何从0开始? 我们在学习数组时会有这个疑问,数组元素的下标为什么不从1开始呢? 从1开始不是更符合大家的日常习惯吗?生活中我们通常说第1个,而不是第0个. 的确,有些计算机语言如 ...
- java数组下标0_Java语言中数组元素下标从0开始。
[单选题]规范规定,硅酸盐水泥的初凝时间不小于( ). [判断题]打开/关闭"对象追踪"的功能键是F11. [判断题]break语句的作用是结束当前的循环体. [单选题]项目标识代 ...
- 删除数组中指定元素_如何删除PHP数组元素键值并重新排序
点击蓝字关注我们!每天获取最新的编程小知识! 源 / php中文网 源 / www.php.cn 想要删除PHP数组中某个元素键值,然后重新规范索引排序.我们可以使用PHP中的内置函数uns ...
- C语言将数组中的值逆序存放
C语言将数组中的值逆序存放 #include<stdio.h> #define N 5 int main(){int a[N], i, temp;printf("请输入一个数组: ...
- c语言打印数组元素_C程序打印元素差为0或1的子集数
c语言打印数组元素 Given an array of integers, find and print the maximum number of integers you can select f ...
- php 未定义数组索引_如何删除PHP数组元素键值并重新排序
点击蓝字关注我们!每天获取最新的编程小知识! 源 / php中文网 源 / www.php.cn 想要删除PHP数组中某个元素键值,然后重新规范索引排序.我们可以使用PHP中的内置函数uns ...
- c语言中的下标变量是什么,c语言引用数组元素时其数组下标的允许的数据类型是什么...
c语言引用数组元素时其数组下标的允许的数据类型是什么 发布时间:2020-07-30 11:56:52 来源:亿速云 阅读:621 作者:Leah c语言引用数组元素时其数组下标的允许的数据类型是什么 ...
- java如何打印数组的值,Java打印数组元素的值
本篇文章帮大家学习java打印数组元素的值,包含了Java打印数组元素的值使用方法.操作技巧.实例演示和注意事项,有一定的学习价值,大家可以用来参考. 以下实例演示了如何通过重载 MainClass ...
最新文章
- jdk安装教程_在JDK 12精简数字格式中使用最小分数数字
- python实现真正的冒泡排序算法(时间复杂度优化版)!
- ribbon和feign的区别
- python写机器人程序_用Python写的一个多线程机器人聊天程序
- c json输出html标签,Json编码HTML字符串
- Simulink之绝缘栅双极型晶体管(IGBT)
- 冷知识 —— 容易读错的发音(英文)
- Spring Boot的MyBatis注解:@MapperScan和@Mapper
- 黑域助手连接服务器才能用吗,黑域app怎么使用?进入黑域详细教程[图]
- iphone4s蜂窝数据连不上解决方案
- Linux命令老是记不住?一篇文章帮你解决。Linux常用命令汇总
- 玩转Atlas 200DK(一)分设环境之开发环境准备
- 龙芯IPC追平Zen2 稳步推进产业生态
- C/C++的内存分配?栈和堆的区别?为什么栈快?
- hbase学习教程(一):hbase的概述和hbase架构及基本组件
- python游戏开发框架_Python游戏开发:数字华容道
- Nature重磅!在机器人骨架上首次生成人类肌腱细胞
- Silverlight认识
- 阅读nutch.Analysis.jj
- 强制卸载VS2013
热门文章
- 《Adobe Illustrator CS6中文版经典教程(彩色版)》—第1课1.8节使用面板菜单
- 【BZOJ2738】矩阵乘法 [整体二分][树状数组]
- 【原创】开源Math.NET基础数学类库使用(14)C#生成安全的随机数
- String to Integer (atoi) leetcode java
- 备份集中的数据库备份与现有的 '***' 数据库不同 RESTORE DATABASEnbs
- RHEL6入门系列之十三,阶段练习1
- C# 时间+三位随机数
- CodeBlcoks插件
- Windows7中Prefetch预读文件技术详解
- 为什么一定要回家?因为我们是中国人