首页 > 编程语言 >C++中一般指针,指针数组,数组指针

C++中一般指针,指针数组,数组指针

时间:2024-09-18 15:49:34浏览次数:9  
标签:指向 int 元素 C++ 一个 数组 指针

凤凰台上凤凰游,凤去台空江自流。
吴宫花草埋幽径,晋代衣冠成古丘。
三山半落青天外,二水中分白鹭洲。
总为浮云能蔽日,长安不见使人愁。

                                                       ——《登金陵凤凰台》【唐】李白 

今天是中秋节,小编在这里祝大家学业有成,工作顺利,家庭和睦,幸福美满。


好的我们今天就来看一看这C++最强功能指针的几种常见的原始指针。

正文:

1.一般类型指针

这里的一般类型指针就是我们最常见的指针(T*),这里的T其实是类型名称,是常见类型的各种名称(全称:tapename,简称T;还有我们要清楚指针的关键其实是*,例如:int *i;这个指针其实就是int型的指针,i其实是这个指针的名字,所以真正有作用的是*)。

实例演示:
include <iostream>
using namespace std;
int main()
{
int i=4;int*I=&i;
cout<<"变量地址"<<I<<endl;
cout<<"间接访问元素本身"<<*I<<endl;

double u=3.14;int*U=&u;
cout<<"变量地址"<<U<<endl;
cout<<"间接访问元素本身"<<*U<<endl;

char b='c';int*B=&i;
cout<<"变量地址"<<B<<endl;
cout<<"间接访问元素本身"<<*B<<endl;

return 0;
}

这里呢我定义了三个指针,这三个指针分别是(int型  double型 char型)。我们首先找了一个变量然后我们将指针指向变量的地址,然后我们再输出指向的元素的地址,间接访问该元素。

这就是最常见的,用的最多的指针,这个指针是一种泛型指针,就是一种大的类型。

2.指针数组,数组指针:

明白了上面的泛型指针,我们就来看看这个有些相似的两种指针,一个是指针数组,一个是数组指针。大家先思考一下,这两个到底有什么区别,它们都是指针吗,还是都不是呢?

以下是对指针数组和数组指针的详细解释:


指针数组


定义:
指针数组是一个数组,其特点在于数组的每个元素都是指针。
它通常用于处理字符串数组、动态数组等复杂数据结构。
声明方式:
数据类型 *数组名[数组大小];
例如:int *ptrArray[5]; 定义了一个包含5个指向整数的指针的数组。
用途:
提供了存储多个指针的机制,每个指针可以指向不同类型的数据或对象。
在处理字符串数组时非常有用,因为字符串在C语言中通常是通过字符指针来表示的。
操作:
需要为每个指针分配内存或指向一个有效的地址。
通过指针数组,可以方便地访问和修改所指向的数据。

数组指针


定义:
数组指针是一个指针,它指向一个数组的首地址。
它通常用于处理多维数组或需要直接操作整个数组的情况。
声明方式:
数据类型 (*指针名)[数组大小];
例如:int (*arrayPtr)[5]; 定义了一个指向包含5个整数的数组的指针。
用途:
允许通过单个指针来操作整个数组。
在处理多维数组时特别有用,因为它可以直接指向数组的一行或一块连续内存。
操作:
可以通过数组指针来遍历和访问数组的所有元素。
使用多级间接引用来访问和修改数组中的数据。
区别与联系
区别:指针数组是数组,其元素为指针;而数组指针是指针,它指向一个数组。
联系:它们都与指针和数组相关,是C语言中处理复杂数据结构的重要工具。在实际编程中,根据具体需求选择使用指针数组或数组指针。

 怎么样大家想到了吗,大家有没有被这两个相似的名称所搞糊涂呢?(刚开始分不清很正常)

简单来说其实 指针数组(array of pointers)从英文名字大家就可以看出端倪,这数组指针其实就是一个数组里的元素都是指针,重点是后面地数组,所以这指针数组·就是数组。

数组指针(a pointer to an array)这个其实就是一个指向数组的指针罢了,本质上是指针,指向的对象是数组罢了,数组还是那个正常的数组。

定义方法:

指针数组:T*t[];

数组指针:T(*t)[];

例如:

指针数组:int*t[];

数组指针:int(*t)[];

这就是简单的表示方法,从这两种表示方式我们也可以看到各自的特点。大家看一看这两个表示方法看一看是否什么发现。其实就是[]的优先级问题。有[]的优先级会更加的高(在一个表达式中)。比如指针数组的T*t[];我们可以将其改写成这样:T*(t[]);这样其实我们看到的就是一个数组,只不过数组里的元素都是指针罢了。再看数组指针:int(*t)[];这里的小括号使其变成一个指针,只不过指向的目标是一个数组(正常的数组,数组元素都是正常的元素)。

实例演示:
include <iostream>
using namespace std;
int main()
{
int a[4]={0x80000000,0xFFFFFFFF,0x00000000,77}
int *x[4];
int (*y)[4];
y=&i;

for(int i=0;i<4;i++)
{
x[i]=&a[i];
}

cout<<*x[0]<<endl;
cout<<(*y)[3]<<endl;


return 0;
}

代码中我们定义了一个数组(其中的三个元素我是利用了补码的内容);然后我们分别定义指针数组,数组指针。由于数组指针y是一个指向数组的指针,所以我们可以直接将数组a的地址赋给y;然后我们写了一个循环,由于指针数组x是数组,所以利用循环才可以给其元素赋值,且由于指针数组的元素是指针所以我们将数组a的元素的地址分别赋值给x的元素。然后输出结果就没问题了。

这就是几种常见的原始指针的基本知识。我们主要理解的就是数组指针和指针数组的区别和定义方式。这里呢我再留一个小的问题:我们可不可以输出cout<<x[0]<<endl;呢?为什么?我们下期揭晓答案。


标签:指向,int,元素,C++,一个,数组,指针
From: https://blog.csdn.net/2301_81280642/article/details/142312240

相关文章

  • Rust有指针类型数据吗?是否可以查看一个变量的内存地址?
    在Rust中,虽然不像C/C++那样直接使用传统的指针类型,但Rust依然有指针的概念,且提供了多种安全的方式来操作和管理内存。你可以通过一些Rust的特性查看变量的内存地址并安全地进行指针操作。1.引用(References)Rust的引用(&和&mut)可以理解为一种安全的、受所有权规则和借......
  • C++11的一些特性
    记录一下使用过的C++11的一些特性,大致分为三部分:并发相关,智能指针相关,chrono。 并发相关:std::thread相关:#include<iostream>#include<thread>usingnamespacestd;intmain(){autofunc=[](){for(inti=0;i<10;++i){cout<<i<......
  • 3D高斯渲染 (1-3)ros下 接受c++节点发送的位姿,python节点渲染图像返回,同步版本
    基础学习3D高斯渲染(1-2)ros下接受c++节点发送的位姿,python节点渲染图像返回https://www.cnblogs.com/gooutlook/p/18385485ros自定义消息(图像+标志位+位姿)python和c++发布和接受https://www.cnblogs.com/gooutlook/p/18412553 本工程代码为什么要做这个,因为之前的版本......
  • 算法学习每日一题之2332. 坐上公交的最晚时间:二分答案 & 贪心双指针
    Problem:2332.坐上公交的最晚时间人话题意:你是一个懒惰的人,虽然你要赶公交车,但你想多睡会,恰好你知道每辆车的发车时间buses和每辆车容capacity,和每个乘客乘车的时间passenger,旨在求可以赶上公交车的最晚出发时间。思路一:二分答案求最晚能满足赶上公交的时间,可以发现......
  • 【C语言从不挂科到高绩点】19-指针01【重点知识】
    Hello!彦祖们,俺又回来了!!!,继续给大家分享《C语言从不挂科到高绩点》课程!!本节将为大家讲解C语言中非常重要的知识点-指针:本套课程将会从0基础讲解C语言核心技术,适合人群:大学中开设了C语言课程的同学想要专升本或者考研的同学想要考计算机等级证书的同学想要从事C/C++/嵌......
  • c++ 找到给定点集的简单闭合路径(Find Simple Closed Path for a given set of points)
    给定一组点,将这些点连接起来而不相交例子: 输入:points[]={(0,3),(1,1),(2,2),(4,4),          (0,0),(1,2),(3,1},{3,3}};输出:按以下顺序连接点将    不造成任何交叉    {(0,0),(3,1),(1,1),(2,2),(3,3),......
  • 【每日一题】LeetCode 2332.坐上公交的最晚时间(数组、双指针、二分查找、排序)
    【每日一题】LeetCode2332.坐上公交的最晚时间(数组、双指针、二分查找、排序)题目描述给你一个下标从0开始长度为n的整数数组buses,其中buses[i]表示第i辆公交车的出发时间。同时给你一个下标从0开始长度为m的整数数组passengers,其中passengers[j]表示第......
  • C++信奥老师解一本通题 1164:digit函数
    ​【题目描述】在程序中定义一函数digit(n,k),它能分离出整数n从右边数第k个数字。【输入】正整数n和k。【输出】一个数字。【输入样例】318593【输出样例】8#include<iostream>usingnamespacestd;intdigit(longlongn,intk){ if(k==1) returnn%10......
  • C++信奥老师解一本通题 1369:合并果子(fruit)
    ​【题目描述】在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆。多多决定把所有的果子合成一堆。每一次合并,多多可以把两堆果子合并到一起,消耗的体力等于两堆果子的重量之和。可以看出,所有的果子经过n−1次合并之后,就只剩下一堆了。多多在合并......
  • C++学习笔记(26)
    七、显示字符串中的字符从界面上输入一个字符串(C风格),把字符串中的每个字符显示出来,如果输入的是"abc",要求:1)正序显示:abc2)逆序显示:cba求字符串的长度可以利用上一题的成果,也可以直接用strlen()函数,关注性能的细节。示例:#include<iostream>usingnamespacestd;//......