IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 指针的运用 -> 正文阅读

[C++知识库]指针的运用

? ? ? ? 作为C语言萌新刚刚学习了指针但是对指针理解不透彻不会使用指针不知道在什么场景下使用,查了查资料在这里做一下总结。

一、type *p? ?//指向type类型的指针

使用指针对变量的操作

#include<stdio.h>
int main()
{
    int a=2021;
    int *p;
    p = &a;
    printf("%d\n",a);
    printf("%d\n",*p);
    (*p)++;  //加上括号,不然就先输出*p然后p++.
    printf("%d\n",a);
    printf("%d",*p);
    return 0;

}

指针对一维数组赋值与打印输出:

int a[5],*p=a,i;
for(i=0;i<5;i++)
	scanf("%d",p+i);
for(i=0;i<5;i++)
	printf("%2d",*(p+i));

?

?使用指针对一维字符数组的操作

#include<stdio.h>
int main()
{
    char a[20],*p=a;  //指针的声明与初始化
    int i;
    gets(p);
    printf("输出:\n%s\n",p);//以字符串形式输出
    for(i=0;i<20;i++)  //字符形式循环输出
        printf("%c",*(p+i));
    return 0;

}

二、type *p[]? //指向type类型的一维指针数组(存放着type类型的数据组成的一维数组/也可以存放二维数组的每行首地址)

使用指针数组可以减少内存空间的浪费

char *p[]={"I","love","you"};

当然也可以先声明指针在赋值;

char *p[3];
p[0] = "I";
p[1] = "love";
p[2] = "you";

还可以获取二维字符数组首地址再进行操作,虽然有空间的浪费,但是灵活;

int i;
char a[3][20] = {"I","love","you"},*p[3];
for(i=0;i<3;i++)
    p[i]=a[i];
    
for(i=0;i<3;i++)
    printf("%s \n",p[i]);

结果是:?

三、type (*p)[]? //指向一维数组的指针,有的也叫做行指针【注意声明行指针时记得对 [ ] 赋值及加上二维数列数?】我是这么理解的:首先p与*结合表示p指向一个地址,*p [ i ]表示这个地址的值,这个一维数组有i个值。现在有一个问题,我们如何操作一维数组与二维数组呢?

一维数组赋值与打印输出

int a[4],(*p)[4]=a;      //谭浩强老师的书上是&a但是我在电脑上得到的结果是相同的,这一点不懂
    int i;              
    for(i=0;i<4;i++)
        scanf("%d",&(*p)[i]);
    for(i=0;i<4;i++)
        printf("%d",*(*p+i));

?

?

赋值打印输出二维数组:(*(p+i)+j)? 这个整体表示二维数组的地址指定数组大小的作用来了,当p+i表示为p+i*4? 所以(*(p+i)+i)就是*(p+i*4+j).

int a[3][4],(*p)[4]=a,i,j;   //对指针声明以及初始化
for(i=0;i<3;i++)
    for(j=0;j<4;j++)
        scanf("%d",*(p+i)+j);    //表示*(p+i*4+j)==&p[i][j]
for(i=0;i<3;i++)
    for(j=0;j<4;j++)
        printf("%d",*(*(p+i)+j));  //表示*(*(p+i*4+j))==p[i][j]

?

?

对二维字符串赋值打印:


char a[3][5],(*p)[5]=a;
int i;
for(i=0;i<3;i++)
gets(*(p+i));       //p+i实际上是p偏移了i*5个字节,到了下一行的首地址
for(i=0;i<3;i++)
    printf("%s\n",*(p+i));

?

?

四、type **p? 将他们分开就好理解了type *? 与? *p? 表示p的数据类型为type * 则p指向一个地址,*p表示这个地址的值**p才表示这个地址上存放的type类型的值,与type *p和好区分的。

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-11-25 07:56:38  更:2021-11-25 07:56:44 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 8:58:23-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码