时间:2021-05-19
首先来分别看一下,指针数组的一个小例子:
数组指针:
#include <stdio.h> int main() { int i; int* pI = &i; //普通类型 typedef int(AINT5)[5]; AINT5* p1; int array[5]; p1 = &array; //数组指针1 int (*p2)[5] = &array; //数组指针2(不建议这样写) int (*p3)[4] = &array; // X 数组指针3(不建议这样写) return 0; }这两个名字不同当然所代表的意思也就不同。我刚开始看到这就吓到了,主要是中文太博大精深了,整这样的简称太专业了,把人都绕晕了。从英文解释或中文全称看就比较容易理解。
指针数组:array of pointers,即用于存储指针的数组,也就是数组元素都是指针
数组指针:a pointer to an array,即指向数组的指针
还要注意的是他们用法的区别,下面举例说明。
int* a[4] 指针数组
表示:数组a中的元素都为int型指针
元素表示:*a[i] *(a[i])是一样的,因为[]优先级高于*
int (*a)[4] 数组指针
表示:指向数组a的指针
元素表示:(*a)[i]
注意:在实际应用中,对于指针数组,我们经常这样使用:
typedef int* pInt;pInt a[4];这跟上面指针数组定义所表达的意思是一样的,只不过采取了类型变换。
代码演示如下:
#include <iostream> using namespace std; int main(){int c[4]={1,2,3,4};int *a[4]; //指针数组int (*b)[4]; //数组指针b=&c;//将数组c中元素赋给数组afor(int i=0;i<4;i++){a[i]=&c[i];}//输出看下结果cout<<*a[1]<<endl; //输出2就对cout<<(*b)[2]<<endl; //输出3就对return 0;}注意:定义了数组指针,该指针指向这个数组的首地址,必须给指针指定一个地址,容易犯的错得就是,不给b地址,直接用(*b)[i]=c[i]给数组b中元素赋值,这时数组指针不知道指向哪里,调试时可能没错,但运行时肯定出现问题,使用指针时要注意这个问题。但为什么a就不用给他地址呢,a的元素是指针,实际上for循环内已经给数组a中元素指定地址了。但若在for循环内写*a[i]=c[i],这同样会出问题。总之一句话,定义了指针一定要知道指针指向哪里,不然要悲剧。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
详解C语言中Char型指针数组与字符数组的区别1.char类型的指针数组:每个元素都指向一个字符串,指向可以改变char*name[3]={"abc","def
C语言指针与数组的详解及对比通俗理解数组指针和指针数组数组指针:eg:int(*arr)[10];数组指针通俗理解就是这个数组作为指针,指向某一个变量。指针数组
指针是C/C++语言的特色,而数组名与指针有太多的相似,甚至很多时候,数组名可以作为指针使用。但是数组名有些地方又不同于指针。这里将数组名与指针用法的不同做一下
数组指针与指针数组的区别在于:数组指针p是一个指针,而指针数组p是一个存放N个指针变量的数组。一、数组指针int(*p)[n]重点:()优先级高([]、()的优
在C语言中“char”是声明一个字符类型的指针,定义数据类型,char可以定义字符有变量、数组、指针。 C语言是一门面向过程的计算机编程语言,与C++、Jav