首页 > 其他分享 >第18节 指针与数组

第18节 指针与数组

时间:2024-07-06 11:29:04浏览次数:17  
标签:10 int 18 元素 数组 字符串 指针

文章目录

第18节 指针与数组

1.一维数组与指针
►C++程序员更偏爱使用指针来访问数组元素,这样做的好处是运行效率高、写法简洁。
    
►1. 一维数组的地址 
	► 数组由若干个元素组成,每个元素都有相应的地址,通过取地址运算(&)可以得到每个元素的地址。 
        int a[10]; 
        int *p=&a[0]; //定义指向一维数组元素的指针 
        p=&a[5]; //指向a[5] 

	►C++规定,数组名既代表数组本身,又代表整个数组的地址,还是数组首元素的地址值,即a与第0个元素的地
	址&a[0]相同。例如下面两个语句是是等价的。 
		①p=a; 
		②p=&a[0]; 
	►数组名是一个指针常量,因而它不能出现在左值和某些算术运算中,例如: 
        int a[10], b[10], c[10]; 
        a=b; //错误,a是常量不能出现在左值的位置 
        c=a+b; //错误,a、b是地址值,不允许加法运算 
        a++; //错误,a是常量不能使用++运算

►2. 指向一维数组的指针变量 
    ► 定义指向一维数组元素的指针变量时,指向类型应该与数组元素类型一致,例如: 
        int a[10], *p1; 
        double f[10], *p2; 
        p1=a; //正确 
        p2=f; //正确 
        p1=f; //错误,指向类型不同不能赋值

►3. 通过指针访问一维数组 
    ► 由于数组元素的地址是规律性增加的,根据指针算术运算规则,可以利用指针及其运算来访问数组元素。 
    ►设有如下定义: 
        int *p, a[10]={1,2,3,4,5,6,7,8,9,10}; 
        p=a; //p指向数组a 
        p++;

在这里插入图片描述

	设:a是一维数组名,p是指针变量且p=a。根据以上叙述,访问一个数组元素a[i],可以用: 
            ①数组下标法:a[i]; 
            ②指针下标法:p[i]; 
            ③地址引用法:*(a+i); 
            ④指针引用法:*(p+i)。
    【例6.1】用多种方法遍历一维数组元素 
        ①下标法。
            1 #include <iostream> 
            2 using namespace std; 
            3 int main() 
            4 { 
            5 int a[10], i; 
            6 for (i=0;i<10;i++) cin>>a[i]; 
            7 for (i=0;i<10;i++) cout<<a[i]<<" "; 
            8 return 0; 
            9 }
        *****************************************
        ②通过地址间接访问数组元素。 
            1 #include <iostream> 
            2 using namespace std; 
            3 int main() 
            4 { 
            5 		int a[10], i; 
            6 		for (i=0;i<10;i++) cin>>*(a+i); 
            7 		for (i=0;i<10;i++) cout<<*(a+i)<<" "; 
            8 		return 0; 
            9 }
        *****************************************
        ③通过指向数组的指针变量间接访问元素。 
            1 #include <iostream> 
            2 using namespace std; 
            3 int main() 
            4 { 
            5 		int a[10], *p; 
            6 		for (p=a;p<a+10;p++) cin>>*p; 
            7 		for (p=a;p<a+10;p++) cout<<*p<<" "; 
            8 		return 0; 
            9 }   
            
►4.数组元素访问方法的比较 
    ►(1)使用下标法访问数组元素,程序写法比较直观,能直接知道访问的是第几个元素。 
    ►(2)而使用指针引用法,指针变量直接指向元素,不必每次都重新计算地址,能提高运行效率。 
    ►(3)将自增和自减运算用于指针变量十分有效,可以使指针变量自动向前或向后指向数组的下一个或前一个元素。
2.指针与字符串
►可以利用一个字符型的指针处理字符串,其过程与通过指针访问数组元素相同。使用指针可以简化字符串的处理,是程
序员处理字符串常用的编程方法。
    
►C++允许定义一个字符指针,初始化时指向一个字符串常量,一般形式为: 
    char *p="C Language"; 
    char *p; 
    p="C Language";
►初始化时,p存储了这个字符串首字符地址4000,而不是字符串常量本身,称p指向字符串。
    
►通过字符指针可以访问字符串。例如: 
    char str[]="C Language", *p=str; //p指向字符串的指针 
    cout<<p<<endl; //输出:C Language 
    cout<<p+2<<endl; //输出:Language 
    cout<<&str[7]<<endl; //输出:age 

►通过字符指针遍历字符串。 
	char str[]="C Language", *p=str; //p指向字符串的指针 
	while (*p!='\0') cout<<*p++;
    
【例18.2】指针访问字符串举例 
    1 #include <iostream> 
    2 using namespace std; 
    3 int main() 
    4 { 
    5 		char str[100],*p=str; 
    6 		cin>>str; //输入字符串 
    7 		while (*p) p++; //指针p指向到字符串结束符 
    8 		cout<<"strlen="<<p-str<<endl; 
    9 		return 0; 
   10 } 
    /*
    运行结果: JavaScript ↙ 
             strlen=10
    */

►请记住,指针可以指向数组,使得数组的访问多了一种途径,但指针并不能替代数组来存储大批量数据。 
    char s[100]="Computer"; 
    char *p="Computer"; 
        ►①存储内容不同 
        ►②运算方式不同 
        ►③赋值操作不同
            
►如果字符串数组是一个二维字符数组,例如: 
    char sa[6][7]={"C++","Java","C","PHP", "CSharp","Basic"}; 
►则字符串数组的内存形式为:

在这里插入图片描述

标签:10,int,18,元素,数组,字符串,指针
From: https://blog.csdn.net/m0_69088645/article/details/140218754

相关文章

  • 第19节 指针与函数
    文章目录第19节指针与函数1.指针作为函数的参数1、指针作为函数的参数2、数组作为函数的参数2.引用和指向函数的指针3、引用4、指向函数的指针第19节指针与函数1.指针作为函数的参数1、指针作为函数的参数►指针最重要的应用是作为函数参数,它使得被调函数......
  • C-数组地址移动
    #include<stdio.h>intmain(){inta[6]={1,2,3,4,5,6};printf("a的地址%p\n",a);//a代表a[0]的地址也是a的首地址printf("a[0]的地址%p\n",&a[0]);//a[0]的地址return0;}在一维数组中a和a[0]的地址相同,a和&a[0]的都代表a[0]的地址,&a代表整个数组a......
  • 数组练习题(一)
    1.   (销售人员薪金范围)解决以下问题。一家公司以底薪加提成的方式付给销售人员工资。销售人员每周获得200美元的底薪,外加本周达到一定销售额的9%的提成。例如,一个销售人员一周的销售额是5000美元,就会得到200美元加上5000美元的9%,即总共650美元。请编写一个程序(利用一......
  • 树莓派学习笔记18:IIC驱动_PCA9685(16路舵机驱动模块)
    今日继续学习树莓派4B4G:(RaspberryPi,简称RPi或RasPi)本人所用树莓派4B装载的系统与版本如下: 版本可用命令(lsb_release-a)查询:​​ Python版本3.7.3:​​ IIC驱动_PCA9685(16路舵机驱动模块)文章提供测试代码讲解,整体代码贴出、测试效果图目录 开启树......
  • 深入理解数组及其操作
    前言数组(Array)是一种线性数据结构,用于存储相同类型的元素。它在编程中广泛使用,因其简单性和高效的随机访问特性而受欢迎。本文将详细介绍数组的概念、基本操作及其在C语言中的实现。数组的基本概念数组是一组有序的元素集合,每个元素通过数组名和一个索引进行访问。数组的索......
  • 语法基础——字符、字符串与字符数组
    字符、字符串和字符数组2024-07-0520:52:00星期五字符串和字符数组的区别和联系字符串和字符数组在C语言中是紧密相关的概念,但它们之间存在一些区别和联系。定义与表示:字符串在C语言中并没有专门的类型,而是通过字符数组来表示。字符数组可以用来存储一个字符串,其中字......
  • 【力扣】每日一题—第88题,合并两个有序数组
    目录题目暴力求解思路:通过代码:拓展学习:最终代码如下:题目给你两个按**非递减顺序**排列的整数数组`nums1`和`nums2`,另有两个整数`m`和`n`,分别表示`nums1`和`nums2`中的元素数目。请你**合并**`nums2`到`nums1`中,使合并后的数组同样按**非递减顺序*......
  • 【leetcode】双指针算法题
    文章目录1.算法思想2.移动零3.复写零方法一方法二4.快乐数5.盛水最多的容器方法一(暴力求解)方法二(左右指针)6.有效三角形的个数方法一(暴力求解)方法二(左右指针)7.两数之和8.三数之和9.四数之和1.算法思想常见的双指针有两种形式,⼀种是左右指针,⼀种是快慢指针。左右......
  • C++基础知识持续更新,今天来记录结构体的基本知识,包括结构体的定义和使用,结构体数组,结
    C++结构体C++基础知识持续更新,今天来记录结构体的基本知识,包括结构体的定义和使用,结构体数组,结构体指针,结构体嵌套结构体,结构体做函数参数,结构体中的const的使用场景,以及结构体的案例。1.结构体的定义和使用结构体属于用户自定义的数据类型,允许用户存储不同的数据类型。......
  • Mybatis PageHelper编译SQL引发的一次性能问题.18286262
    起源最近一直在跟大佬们做公司项目的性能优化,我这种小卡乐咪基本上负责的就是慢接口优化,但实际上只有以下几种情况需要进行接口代码级别的改造:循环查库、RPC数据库设计不合理业务流程太长,代码耦合性太高等随着对接口分析的深入,我们越来越发现系统中有很多拖后腿的问题是与......