数组指针/指针数组的示例

这两个名字不同当然所代表的意思也就不同。我刚开始看到这就吓到了,主要是中文太博大精深了,整这样的简称太专业了,把人都绕晕了。从英文解释或中文全称看就比较容易理解。

指针数组:array of pointers,即用于存储指针的数组,也就是数组元素都是指针

数组指针:a pointer to an array,即指向数组的指针

还要注意的是他们用法的区别,下面举例说明。

int* a[4]     指针数组

表示:数组a中的元素都为int型指针

元素表示:*a[i]   *(a[i])是一样的,因为[]优先级高于*

int (*a)[4]   数组指针

表示:指向数组a的指针

元素表示:(*a)[i]

注意:在实际应用中,对于指针数组,我们经常这样使用:

1  typedef int* pInt;

2 pInt a[4];

这跟上面指针数组定义所表达的意思是一样的,只不过采取了类型变换。

代码演示如下:

 1 #include <iostream>
 2
 3 using namespace std;
 4
 5 int main()
 6 {
 7 int c[4]={1,2,3,4};
 8 int *a[4]; //指针数组
 9 int (*b)[4]; //数组指针
10    b=&c;
11 //将数组c中元素赋给数组a
12 for(int i=0;i<4;i++)
13 {
14 a[i]=&c[i];
15 }
16 //输出看下结果
17 cout<<*a[1]<<endl; //输出2就对
18 cout<<(*b)[2]<<endl; //输出3就对
19 return 0;
20 }

注意:定义了数组指 针,该指针指向这个数组的首地址,必须给指针指定一个地址,容易犯的错得就是,不给b地址,直接用(*b)[i]=c[i]给数组b中元素赋值,这时数组 指针不知道指向哪里,调试时可能没错,但运行时肯定出现问题,使用指针时要注意这个问题。但为什么a就不用给他地址呢,a的元素是指针,实际上for循环 内已经给数组a中元素指定地址了。但若在for循环内写*a[i]=c[i],这同样会出问题。总之一句话,定义了指针一定要知道指针指向哪里,不然要悲剧。

时间: 2025-01-13 02:07:55

数组指针/指针数组的示例的相关文章

指针与数组

前面的东西都比较基础,后面的这个才是真正关键的地方. 示例代码: #include <iostream> #include <stdlib.h> int main(int argc, char *argv[]) { //argc 指的是参数个数 // argv[0]指的是程序的名字 // argv[1]值的是程序执行的第一个参数 int array[10]={1023,2,3,4,5,6}; int *p = &array[0]; int *p1 = array; prin

数组和指针的对比

C++/C程序中,指针和数组在不少地方可以相互替换着用,让人产生一种错觉,以为两者是等价的.数组要么在静态存储区被创建(如全局数组),要么在栈上被创建.数组名对应着(而不是指向)一块内存,其地址与容量在生命期内保持不变,只有数组的内容可以改变.指针可以随时指向任意类型的内存块,它的特征是“可变”,所以我们常用指针来操作动态内存.指针远比数组灵活,但也更危险. 1.修改指针和数组指向的常量 示例代码,字符数组a的容量是6个字符,其内容为hello\0.a的内容可以改变,如a[0]= ‘X’.指针p

《C++ Primer》学习 之 返回数组的引用(返回数组的指针,方法与之相同)

/* 返回数组的引用(返回数组的指针,方法与之相同) 共四种方法(在下面示例程序中,调用其中一种方法时,需要将其他三种方法注释掉)*/ 1 #define _CRT_SECURE_NO_WARNINGS 2 #define HOME 3 #include <iostream> 4 #include <stdexcept> 5 #include <ctype.h> 6 #include <locale> 7 #include <iterator>

数组与指针的区别,以及在STL中传递数组/指针

数组和指针在作为实参传入T[] 或T*的形参时没有区别 void f(int pi[]) { cout << sizeof(pi) << endl; } int a[5] = { 1,2,3,4,5 }; f(a); 上述代码输出的是4(32位系统)或8(64位系统),总之不是sizeof(int) * 5(数组大小). 为什么明明形参是数组形式的int [],实际上和指针形式的int *无异呢?关键原因就在于,数组是不能作为左值的. 也就是说,你不能定义两个数组,比如int a[

不可或缺 Windows Native (18) - C++: this 指针, 对象数组, 对象和指针, const 对象, const 指针和指向 const 对象的指针, const 对象的引用

[源码下载] 不可或缺 Windows Native (18) - C++: this 指针, 对象数组, 对象和指针, const 对象,  const 指针和指向 const 对象的指针, const 对象的引用 作者:webabcd 介绍不可或缺 Windows Native 之 C++ this 指针 对象数组 对象和指针 const 对象 const 指针和指向 const 对象的指针 const 对象的引用 示例1.CppEmployee 类CppEmployee.h #pragma

指针与数组的对比

C++/C程序中,指针和数组在不少地方可以相互替换着用,让人产生一种错觉,以为两者是等价的. 数组要么在静态存储区被创建(如全局数组),要么在栈上被创建.数组名对应着(而不是指向)一块内存,其地址与容量在生命期内保持不变,只有数组的内容可以改变. 指针可以随时指向任意类型的内存块,它的特征是“可变”,所以我们常用指针来操作动态内存.指针远比数组灵活,但也更危险. 下面以字符串为例比较指针与数组的特性. 7.3.1修改内容 示例7-3-1中,字符数组a的容量是6个字符,其内容为hello\0.a的

C++ DWORD 转byte char 数组、指针

byte byteData[1024]; // byte数组,示例 DWORD dwData = dwReadBytes; // dword数据,示例 byteData[0] = (dwData & 0xFF000000) >> 24; // 最高位字节 byteData[1] = (dwData & 0x00FF0000) >> 16; // 第二高位字节 byteData[2] = (dwData & 0x0000FF00) >> 8; //

程序设计基石与实践系列之类型提升、内存分配,数组转指针、打桩和矢量变换

英文出处:Peter Fa?ka: Guide to Advanced Programming in C C语言可用于系统编程.嵌入式系统中,同时也是其他应用程序可能的实现工具之一. 当你对计算机编程怀有强烈兴趣的时候,却对C语言不感冒,这种可能性不大.想全方位地理解C语言是一件极具挑战性的事. Peter Fa?ka 在2014年1月份写下了这篇长文,内容包括:类型提升.内存分配,数组转指针.显式内联.打桩(interpositioning)和矢量变换. 整型溢出和类型提升 多数C程序员以为,

C语言指针与数组的定义与声明易错分析

部分摘自<C语言深度解剖> 1.定义为数组,声明为指针 在文件1中定义: char a[100]; 在文件2中声明: extern char *a; //这样是错误的 这里的extern告诉编译器a这个名字已经在别的文件中被定义了,下面的代码使用的a是在别的文件中定义的.编译器是按文件分别编译的,当a被声明为char* a时,编译器理所当然的认为a是一个指针变量,在32位系统下占用4个byte,这4个byte存放的是地址,地址指向的空间存储的是char类型数据. 程序会返回SIGSEGV. 2