一,指针
1. 定义:指针是一种用于存放另一个变量的地址的变量
2. 初始化:基类型 *指针名; //"*"号用来访问指针所指向的对象
int i;
int *p = &i;// int *p; p = &i;
3.指针举例:
int main()
{
int i; /*定义一个int型变量i*/
int *p; /*定义一个指向int类型的指针p */
i = 2 ; /*初始化i为2 */
p = &i ; /*将i的地址赋给p,即使p指向i */
printf("%d\n",i) ; /*输出i的值*/
printf("%d\n",*p) ; /*输出p所指向的存储单元的值,即i的值*/
return 0 ; /*标准C语言主函数应返回一个值,通知操作系统程序执行成功与否,通常0表示成功*/
}
程序输出结果为:
2
2
4.指针的算术运算符
特别注意:
ANSI C标准没有定义两个指针相加的运算,如果两个指针相加,绝大多数编译器会在编译期报错。
5.当给指针赋一个绝对地址时:
通常先写成整型常量的形式,然后再通过强制类型转换把它转换成相应的类型,如:int * , double * , char *等。
int *p = 0x12345678; //错误
int *p = (int*) 0x12345678; //正确
//原因:0x12345678是int型常量,p是一个指向int型的指针,左右两者类型不同。
6.指向指针的指针
指针是一种变量,它也有自己的地址,所以它本身也是可用指针指向的对象。我们可以将指针的地址存放在另一个指针中,如:
int i= 5000;
int *pi = &i;
int **ppi =π
printf("%d\n", i); //输出5000
printf("%d\n", *pi); //输出5000
printf("%d\n", **ppi); //输出5000
i的地址为108,pi的内容就是i的地址,而pi的地址为104,ppi的内容即是pi的地址。
对ppi**解引用**照常会得到ppi所指的对象,所获得的对象是指向int型变量的指针pi。
想要真正地访问到i,必须对ppi进行两次解引用。
7.举例:
int main()
{
int var = 20; /* 实际变量的声明 */
int *ip; /* 指针变量的声明 */
ip = &var; /* 在指针变量中存储 var 的地址 这两句等价{int *p=&var}*/
printf("Address of var variable: %p\n", &var ); /* 在指针变量中存储的地址 006AFF08*/
printf("Address stored in ip variable: %p\n", ip ); /* 使用指针访问值 006AFF08 */
printf("Value of *ip variable: %d\n", *ip );//20
}
指针参学: http://blog.csdn.net/porscheyin/article/category/410914
———————————————————————————-
二,引用
1. 定义:须在声明引用变量时,进行初始化
int rat=101;
int &rodent=rat;
———————————————————————————-
三,指针,引用,普通函数区别
题目:交换元素
代码段:
main()
{
swap1(a,b);
swap2(&a,&b);
swap1(a,b);
}
调用函数:
void swap1(int &a,int &b);//引用
void swap2(*a,*b); //指针
void swap1(a,b); //普通函数
———————————————————————————-
四,指针与数组
1.数组名:
数组名是常指针,不能对它的值进行修改,ia + 99是可以的,但ia++是不行的,它的意思是ia = ia +1,修改了ia的值。
2.指针数组:
定义: int *p[n];//表示:数组p中的元素都为int型指针
元素表示: p[i] (p[i])是一样的,因为[]优先级高于”*”
首先它是一个数组,数组的元素都是指针,数组占多少个字节由数组本身的大小决定,每一个元素都是一个指针。
3.数组指针(行指针):
定义:定义int (*p)[n]; //指向数组p的指针(定义了指针,一定要知道指针指向哪里,不然悲剧呢),()优先级高,首先说明p是一个指针,指向一个整型的一维数组
元素表示:(*p)[i]
首先它是一个指针,它指向一个数组。
char a[5]={'A','B','C','D'};
char (*p)[5] = &a;
将二维数组赋给一数组指针:
int a[3][4];
int (*p)[4]; //该语句是定义一个数组指针,指向含4个元素的一维数组。
p=a; //将该二维数组的首地址赋给p,也就是a[0]或&a[0][0]
p++; //该语句执行过后,也就是p=p+1; p跨过行a[0][],指向了行a[1][]
//所以数组指针也称指向一维数组的指针,亦称行指针。
举例:
int main()
{
int c[4]={1,2,3,4};
int *a[4]; //指针数组
int (*b)[4]; //数组指针
b=&c;
//将数组c中元素赋给数组a
for(int i=0;i<4;i++)
{
a[i]=&c[i];
}
//输出
cout<<*a[1]<<endl;//2
cout<<(*b)[2]<<endl;//3
return 0;
}