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

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

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


好的我们今天就来看一看这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;呢?为什么?我们下期揭晓答案。


🆗到这里,这篇关于:C++中一般指针,指针数组,数组指针就说完了,求一个免费的赞,感谢阅读。

下期预告:C++中const与指针

 

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部