指針的使用
1.注意:一定要在對指針應用解除應用操作符(*)之前,將指針初始化為一個確定的地址。
例子:
#include<stdio.h>
Int main()
{
Int a;
Int *p;
/*****************指針的錯誤用法:對沒有指向確定的地址*******************/
*p=10;
/************************************************************************/
//正確使用方法
P=&a;
*p=10;
}
C++中還可以使用new來給指針確定地址。
例子:
#include<iostream>
Int main()
{
Int a[4]=new int[4];
Int i=0;
For(i=0;i<4;i++)
a[i]=i;
Delete[] a;
}
2.二維數組指針定義:
對于int **p來說,p所指的對象是指針,那么++p就是讓p的值增一個指針的大小,雖然指針所指對像可大可小,但是指針自己的大小卻是一定的,目前的系統上一般是4字節(64位系統我沒用過,可能是8字節)。也就是說,對char *p和long *q來說,p和q本身占內存容量是一樣大的(雖然char和long占內存不一樣大)。 很多人以為“指向數組的指針”就是“指向指針的指針”,于是有人寫這樣的代碼:int a[2][3];int **p = a;//錯誤 這個代碼的錯誤之處在于a是一個數組,它的成員也是數組,所以a叫做“數組的數組”——C++中嚴格說來沒有二維數組。那么,你要用一個指針來記錄a,就要用一個能表示“數組的數組”的指針,以下代碼是正確的:int (*p)[3] = a;//正確 只有這樣才能保證++p使p指向a的下一對像(該對像是一個數組)。 順便提一句:不要寫成“int *p[3];”
int *p[3];//定義p[3]為指針數組
int (*q)[3];//定義q為數組指針
int a[4][3];//定義一個二維數組
3.指向指針的指針
#include<stdio.h>
Int main()
{
Int a[5]={1,3,5,7,9};
Int *num[5]={&a[0],&a[1],&a[2],&a[3],&a[4]}; //定義一個指針數組
Int **p,i;
P=num;
For(i=0;i<5;i++)
{
PRintf(“%d”,**p);
P++;
}
Printf(“/n”);
}
4.指向函數的指針
#include<stdio.h>
Int (*p)(int,int);
Int printf_one(int,int);
Int printf_two(int,int);
Int main()
{
P=printf_one;
P(1,2);
P=printf_two;
P(3,4);
}
Int printf_one(int a,int b)
{
Printf(“輸出a:%d,輸出b:%d/n”,a,b);
}
Int printf_two(int a,int b)
{
Printf(“輸出a:%d,輸出b:%d/n”,a,b);
}
新聞熱點
疑難解答