指针,引用(1)

一,指针
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;  //正确
//原因:0x12345678int型常量,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=101int &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);          //普通函数

———————————————————————————-

四,指针与数组

扫描二维码关注公众号,回复: 1496741 查看本文章

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;
}

猜你喜欢

转载自blog.csdn.net/zhaoshuling1109/article/details/80493628