双指针的4种含义

以前,我对于双指针所指向的对象究竟是什么、如何初始化双指针等问题一直搞不清楚。今天看了UIUC的教学视频,终于搞明白了。若觉得下面的中文描述不够清楚,请看文章最后的英文描述。


在看双指针之前,先来看看最简单的单指针:


int *X


对于*X,有两种可能(理论上应该说*X指向什么,但为了后面方便理解,这里我们改口为 “ *X是什么 ”):

1. *X是一个整型实例,初始化:X = &(whatever int object)

2. *X是一个整型动态数组 X = new int [size]


那么我们再来看双指针:


int **X


它有4种可能性。(为什么?单指针2种,双指针就是2x2种,n重指针就是2^n种)


1. **X是一个整型实例(X里存的是*X的地址,而*X里存的是一个整型实例的地址)

一层初始化:X = new int *;

二层初始化:*X = new int;


2. **X是一个指针,它指向一个整型的动态数组:

一层初始化:X = new int *;

二层初始化:*X = new int [ size ] ;


3. **X是一个动态数组,在这个动态数组里,每一个元素都是一个整型的动态数组:

一层初始化:X = new int* [ size1 ] ;

二层初始化:for( i=0; i<size1; i++)

X [ i ] = new int [ size2 ] ;


4. **X是一个动态数组,在这个动态数组里,每个元素都是一个指针,每个指针都指向一个整型实例

一层初始化: X = new int* [ size ] ;

二层初始化: for( i=0; i<size; i++ )

X[i] = new int;


 The four meanings of double pointers:  png **p

1). Pointer to a dynamic array of pngs

  p = new png*;

  *p = new png[size];

 

2). Pointer to a pointer to a png

  p = new png*;

  *p = new png;

 

3). A dynamic array of dynamic arrays of pngs

  p = new png*[size1];

  for(i=0;i<size1; i++)

        p[i] = new png[size2];

 

4). A dynamic array of pointers to pngs

  p = new png*[size];

  for(i=0; i<size;i++)

        p[i] = new png;

 

Why are there four: What could int *x be? It could eitherbe a pointer to int, or a dynamic array of ints. So double pointer is 2x2,trible pointer is 2x2x2.


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值