C++定义指针数组

C语言或C++中,数组元素全为指针的数组称为指针数组

一维指针数组的定义为:类型名*数组标识符[数组长度]

eg: int*ptr_array[10];

以下内容来自百度百科

链接

http://baike.baidu.com/link?url=r6JRJbaleIw_69o-t8uO2vTF0r4oukf1bMMpp0sp9caXDbprF9LNZXwfsf4QovUKWloO2r6CJiNFNPNvP5aRS_

与数组指针关系

数组指针是指向数组首元素的地址的指针,其本质为指针(这个指针存放的是数组首地址的地址,相当于2级指针,这个指针不可移动); 指针数组是数组元素为指针的数组,其本质为数组。

例如:*p[2]是指针数组,实质是一个数组,里面的两个元素都是指针
[]的优先级比*的优先级高,p先与[]结合,形成数组p[2],有两个元素的数组,再与*结合,表示此数组是指针类型的,每个数组元素相当于一个指针变量

与二维数组对比

二维数组:如char
string_1[10][10]只要定义了一个二维数组,无论赋不赋值,系统都会给他分配相应空间,而且该空间一定是连续的。其每个元素表示一个字符。我们可以通过制定下标对其元素进行修改。

指针数组:如char
*str_B[5] 系统至少会分配5个连续的空间用来存储5个元素,表示str_B是一个5个元素的数组,每个元素是一个指向字符型数据的一个指针。


如果我做这样的定义:

char a[3][8]={"gain","much","strong"};

char *n[3]={"gain","much","strong"};

他们在内存的存储方式分别如右图所示,可见,系统给数组a分配了

3×8的空间,而给n分配的空间则取决于具体字符串的长度。

此外,系统分配给a的空间是连续的,而给n分配的空间则不一定连续。

由此可见,相比于比二维字符数组指针数组有明显的优点:一是指针数组中每个元素所指的字符串不必限制在相同的字符长度;二是访问指针数组中的一个元素是用指针间接进行的,效率比下标方式要高。
但是二维字符数组却可以通过下标很方便的修改某一元素的值,而指针数组却无法这么做。

C++定义指针数组,码迷,mamicode.com

时间: 2024-10-13 02:40:36

C++定义指针数组的相关文章

typedef 定义指针数组和数组指针及其使用。

#include<stdio.h> typedef char arr[2][5]; typedef char *name[5]; // 指针数组 typedef char (*lan)[5]; // 数组指针 int main() { arr age; name named; lan land; char i; char j; for(i=0;i<2;i++){ for(j=0;j<5;j++){ age[i][j]=i*j+1; } } for(i=0;i<2;i++){

指针数组、数组指针、函数指针、指针函数总结

指针数组 && 数组指针 char *a[5]; //定义一个指针数组, 数组的元素都是char *指针类型.初始化也可以在里面存放字符或字符串.a的类型是char *[5] //若char *a[5]={"red","white","blue","dark","green"}; //a在这里的类型是char *[],实质上是一个二级指针.也就是说a所代表的那块内存里面存放着的是数组中第一个

关于理解指针数组,数组指针,数组名,二维数组的一些技巧。

/*************关于数组名***************/ int a[3] = {1, 2, 3} 1.数组名代表数组第一个元素的地址,注意,不是数组地址(虽然值相等),是数组第一个元素地址,a 等同于 &a[0]; a+1是第二个元素的地址.比第一个元素地址a(或者&a[0])超出了一个整型指针的大小,在这里是4个字节(byte) cout << a << endl;会输出数组第一个元素地址. 2.取址符号&. &a是数组的地址,注意

指针数组、数组指针、函数指针、指针函数总结C++

指针数组.数组指针.函数指针.指针函数总结 2014-11-11 指针数组 && 数组指针 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 char *a[5];      //定义一个指针数组, 数组的元素都是char *指针类型.初始化也可以在里面存放字符或字符串.a的类型是char *[5] //若char *a[5]={"red","white","blue","dark",&qu

(C语言)字符串比较函数,指针数组与数组指针

问题描述: 写一个函数,用于比较两个字符串的比较(string_compare). 程序分析: (1)主要思想:传入两个字符串后,比较这两个字符串中的每个元素,如果第一次比较就不相等,就不要让它进入到下面的比较中.这样一来,将它返回一个相减的值(即:两数组中开始不相等的那两个元素相减,返回值(int类型),是ASCII码值相减).进入比较的过程中时,相等就返回0:其他情况都返回那个相减的值. (2)主要方式:定义指针数组,并对其初始化.然后照上面的思想,进行代码的实现. 代码如下: /***指针

C语言基础知识----指针数组 &amp;&amp; 数组指针 &amp;&amp; 函数指针 &amp;&amp;指针函数

指针数组 && 数组指针 char (*ptr)[5]; //定义一个指向数组指针ptr,指向包含5个char类型的数组 char *a[5]; //定义一个指针数组a,包含5个char*类型指针 #include <stdio.h> int main(void) {     char *a[5]={"red","white","blue","dark","green"};   

C++指针数组、数组指针、数组名及二维数组技巧汇总

这篇文章主要介绍了C++指针数组.数组指针.数组名及二维数组技巧汇总,对于深入理解C++数组与指针来说非常重要,需要的朋友可以参考下. 本文较为详细的分析了关于理解C++指针数组,数组指针,数组名,二维数组的一些技巧.是比较重要的概念,相信对于大家的C++程序设计有一定的帮助作用. 一.关于数组名 假设有数组: 1 int a[3] = {1, 2, 3} 1.数组名代表数组第一个元素的地址,注意,不是数组地址(虽然值相等),是数组第一个元素地址,a 等同于 &a[0]; a+1是第二个元素的地

指针数组与数组指针详解

转自:https://blog.csdn.net/men_wen/article/details/52694069 指针数组与数组指针详解 1.什么是指针数组和数组指针? 指针数组:指针数组可以说成是"指针的数组",首先这个变量是一个数组,其次,"指针"修饰这个数组,意思是说这个数组的所有元素都是指针类型,在32位系统中,指针占四个字节. 数组指针:数组指针可以说成是"数组的指针",首先这个变量是一个指针,其次,"数组"修饰这

C语言数组篇(二)指针数组和数组指针

数组指针 和 指针数组 这两个名词可以说是经常搞混了 数组指针--> 数组的指针       就是前面讲的 指向数组a的指针p; 指针数组-->存满指针的数组  就是一个数组里面存的都是指针.----> 也是所谓的二级指针 数组指针就不讲了,见一维数组和指针. 那么指针数组呢? 首先,指针数组是 一个数组里面都是指针 第一步,我们需要一个数组 point[10]   //我们定义了一个空间为10的数组 第二步,这个数组是什么类型的? 指针类型的 * point[10]     //区别: