24深入理解C指针之---指针和数组
一、指针和数组
#include <stdio.h> int main(int argc, char **argv)
{
int vector[] = {, , , , ,};
int *ptrVector = vector;
int size = sizeof(vector)/sizeof(int); printf("Used arr:\n");
for(int i = ; i < size; i++){
printf("vector[%d]: %d\n", i, vector[i]);
}
printf("\n"); printf("Used ptr:\n");
for(int i = ; i < size; i++){
printf("vector[%d]: %d\n", i, *(ptrVector + i));
}
printf("\n"); printf("Special used arr:\n");
for(int i = ; i < size; i++){
printf("vector[%d]: %d\n", i, i[vector]);
}
printf("\n"); printf("Special used ptr:\n");
for(int i = ; i < size; i++){
printf("vector[%d]: %d\n", i, *(i + ptrVector));
}
printf("\n"); printf("The vector size: %d\n", size); return ;
}
1、代码说明:
1)、9-13行的代码展示了一般的访问数组的方式
2)、15-19行的代码展示了使用指针访问数组的方式
3)、21-25行的代码展示了使用交换指针访问数组的方式
4)、27-31行的代码展示了使用交换数组和下标的访问数组方式
5)、若存在第5和第6行代码,则存在vector[i] <=> *(ptrVector + i),因此必然存在 i[vector] <=> *(i + ptrVector),因此存在21到31行的代码
2、特殊说明:
1)、数组名称本身可以表示数组的地址,可以使用ptrVector = vector语句实现指针赋值;
2)、也可以使用&实现获取地址,使用ptrVector = &vector语句实现指针变量的赋值
3)、可以使用*(ptrVector + i)访问索引为i的数组元素
4)、可以使用*(vector + i)访问索引为i的数组元素
5)、使用数组名运算时,需要主要添加的是整个数组的大小
6)、vector[i] 的机器码是从vector地址开始,移动i个位置,取出对应的内容
7)、*(vector + i)的机器码是从vector地址开始,在地址上增加i,取出对应的内容
24深入理解C指针之---指针和数组的更多相关文章
- 00深入理解C指针之--- 指针之外
该系列文章源于<深入理解C指针>的阅读与理解,由于本人的见识和知识的欠缺可能有误,还望大家批评指教. C语言从诞生之初就非常善于和硬件打交道,经过这么多年的发展之后,其灵活性和超强的特征是 ...
- 10深入理解C指针之---指针运算和比较
该系列文章源于<深入理解C指针>的阅读与理解,由于本人的见识和知识的欠缺可能有误,还望大家批评指教. 指针运算有很多种,主要有指针的声明*.指针的解引*.指针指向(*).或->.指针 ...
- 02深入理解C指针之---指针类型和值
该系列文章源于<深入理解C指针>的阅读与理解,由于本人的见识和知识的欠缺可能有误,还望大家批评指教. 1.指针的类型: 可以在声明指针时,指定指针的类型,例如: (1)void *x 声 ...
- 06深入理解C指针之---指针操作和比较
该系列文章源于<深入理解C指针>的阅读与理解,由于本人的见识和知识的欠缺可能有误,还望大家批评指教. 指针作为一种特殊类型的变量,必须遵守C语言中变量先声明后使用的原则.本节内容中指针的操 ...
- 理解C语言中指针的声明以及复杂声明的语法
昨天刚把<C程序设计语言>中"指针与数组"章节读完,最终把心中的疑惑彻底解开了.如今记录下我对指针声明的理解.顺便说下怎样在C语言中创建复杂声明以及读懂复杂声明. 本文 ...
- 这样子来理解C语言中指针的指针
友情提示:阅读本文前,请先参考我的之前的文章<从四个属性的角度来理解C语言的指针也许会更好理解>,若已阅读,请继续往下看. 我从4个属性的角度来总结了C语言中的指针概念.对于C语言的一个指 ...
- 从四个属性的角度来理解C语言的指针也许会更好理解
文章会在文末更新! 关于指针是什么,很多教材已经作出了定义,大多数都会定义为"存放变量内存地址的变量".从这句话中我觉得除了让我知道这个定义有11个字以外,其他就没什么用了.我个人 ...
- 理解git 中的HEAD指针&branch指针
理解git 中的HEAD指针&branch指针 Yooye关注 2019.02.28 10:44:32字数 492阅读 668 HEAD指针 使用git checkout 来移动HEAD指针, ...
- 深入理解C语言-函数指针
函数指针在C++中有着重要的应用,函数的函数名其本质就是代表一个地址,这个地址叫做函数入口,得到这个地址就可以对这个函数进行各种操作. 函数类型基础 函数三要素: 名称.参数.返回值 C语言中的函数有 ...
- 深入理解C语言-二级指针三种内存模型
二级指针相对于一级指针,显得更难,难在于指针和数组的混合,定义不同类型的二级指针,在使用的时候有着很大的区别 第一种内存模型char *arr[] 若有如下定义 char *arr[] = {&quo ...
随机推荐
- 53. Maximum Subarray@python
Given an integer array nums, find the contiguous subarray (containing at least one number) which has ...
- pandas删除及其映射修改操作。
1.使用drop_duplicates()函数删除重复的行 df.drop_duplicates() 2.映射 映射的含义,创建一个映射关系,把values元素和一个特定的标签或字符串绑定 map = ...
- 利用for循环和range输出9 * 9乘法口诀表
li = [2, 3, 4, 5, 6, 7, 8, 9, 10] for i in li: for j in range(1, i): print('{0} * {1} = {2}'.format( ...
- linux学习-用户的特殊 shell 与 PAM 模块
特殊的 shell, /sbin/nologin 『无法登入』指的是:『这个使用者无法使用 bash 或其他 shell 来登入系统』而已, 并不是说这个账号就无法使用其他的系统资源! 让某个具有 / ...
- 下拉列表 Spinner
在Web开发中,HTML提供了下拉列表的实现,就是使用<select>元素实现一个下拉列表,在其中每个下拉列表项使用<option>表示即可.这是在Web开发中一个必不可少的交 ...
- MyInt的简单实现
#include <iostream> using namespace std; class CMyInt{ private: int value; public: CMyInt(int ...
- 小米手机安装 charles 证书,提示“没有可安装的证书”
错误环境: 1. Mac 下的 charles 2. 小米手机(MI 6 MUI 9.6 ,Android 8.x) 错误提示: 安装 charles 证书时,提示“没有可安装的证书” 解决方法: 1 ...
- day06 面向对象编程
面向对象: 面向对象: 世界万物,皆可分类 世界万物,皆为对象 只要是对象,就肯定属于某种品类 只要是对象,就肯定有属性 特性: 多态: 一个统一的接口,多种实现 例如: 一个 ...
- MacOS常用软件推荐
1.效率提升神器Alfred 可以搜索文件.应用.web搜索.词典等等 链接:https://pan.baidu.com/s/1igv4tuXkuMFOPT9E6Cc5Jg 密码:3o51 软件解压密 ...
- 第四部分 linux使用者管理
第一章 linux帐号管理与acl权限控制 不同的用户拥有不同的权限 可以通过user/group的特殊权限设定,来规范不同的群组开发 一 linux帐号与群组 A 使用者的识别码: UI ...