声明与相关运算符
1、数据类型 *变量名; 2、两种特殊运算符。 取操作数的内存地址& 取指针对应内存地址上的值 * 注意,内存地址上存储可能会是另一个操作数的指针,因为可以多重指针
指针与地址
1、地址是操作数或对象在内存中的起始位置,但并不能表征这个数的大小,这个地址上可能存整型,也可能存字符型等。 2、指指针除了地址以外,还有一个信息,表示了指向对象的类型,这样可以知道指向对象的大小。
例子
int *x;
char *x;
char *y[10];
char (*x)[10];
int *f();
int (*f)();
int (*x[3][2])();
int *(*x)();
指针运算
1、数组指针 下面利用数组指针对二维元素进行访问。
#include <iostream>
#include <string>
using namespace std;
int main(){
int x[][3]={1,2,3,4,5,6};
int (*p)[3];
for(p=&x[0];p<&x[2];p++){
cout<<endl<<*p[0]<<" ";
int *p1=p[0];
cout<<*(p1+1)<<" "<<*(p1+2)<<" ";
}
p=x;
cout<<endl<<*(*(p+1)+1)<<endl;
}
1 2 3
4 5 6
5
==== Program exited with exit code: 0 ====
Time elapsed: 000:00.406 (MM:SS.MS)
Press any key to continue...
2、指针和整型量加减,表示增加或减少一个指针位(完成指针的位移),每个指针位相隔的距离由指针指向的数据类型决定,比如int型,32位,每个int* 的加减号完成32位的地址加减,即4个字节距离。 3、指针指向同一数据类型,可以进行大于、等于、小于等关系运算。 4、指针运算比数组运算要快
空指针
NULL 值 为0,使用==或!=来判定是否空指针 。
无类型指针
void *
const指针
1、const * int 指针指向常量 2、int *const 指针是常量 ,指向的数据可以更改。 3、const int *const 指针和指向的数据都不能更改。
|