【C Prime Plus】学习笔记,Chapter 10,数组和指针之五

来源:互联网 发布:python idle是干嘛的 编辑:程序博客网 时间:2024/05/29 21:16
// 【C Prime Plus】学习笔记,Chapter 10,数组和指针之五// 指针的赋值,加减运算// Page 667#include <stdio.h>int main(void){int *ptr0,*ptr1,*ptr2;     // 如果指针没有初始化,进行 ++ 运算,编译会warning使用了没有初始化的指针,但是不是严重错误 //ptr0++;// 如果没有初始化,就给指针所指的"地址"赋值,其实这个地址是不确定的,编译能通过,仅仅是警告,但是链接就显示这是严重错误的// 可能会覆盖其他的地址上的数据,或者直接导致程序崩溃   //*ptr0=5;int arn[5]={100,200,300,400,500};// (1) 给指针赋值,通常是数组名 或者 用&运算符取某个地址 ptr0 = arn; ptr1 = &arn[1]; printf("指针ptr0的值(地址)是:%ld\n",ptr0); printf("指针ptr1的值(地址)是:%ld\n",ptr1);        // (2) * 运算,所谓的解指引, 就是取指针对应的值 int x = *ptr0;     // (3) &运算,就是取地址运算,可以取指针它自身的地址 printf("指针ptr0自身的地址是:%ld\n",&ptr0); //  (4) 加整数N到指针上,这种算法实际就是移动N个单元,单元就是指针的所指的基本数据类型  //   (减整数N也一样的意思,移动方向相反) //   不论是指针是什么类型的,int,long,或double ,这里的N都必须是整数,因为指针作为地址,其值本质上unsigned int  ptr2=ptr0+2; // 找到ptr0的地址,然后向后移动2个单元.(不是移动ptr0哦,ptr0本身是没有改变的)  printf("指针ptr2的值(地址)是:%ld\n",ptr2);  printf("指针ptr2地址保存的值arn[2]:%ld\n",*ptr2);  // (5) 使用 ++ 或 -- 运算   ptr0++; // 这样改变了ptr0的指向   printf("指针ptr0的值(地址)是:%ld\n",ptr0);   printf("指针ptr0地址保存的值:%ld\n",*ptr0);   ptr0--;    printf("指针ptr0的值(地址)是:%ld\n",ptr0);printf("指针ptr0地址保存的值:%ld\n",*ptr0);//(6) 2个指针做差运算: 结果并非是想当然的十六进制的地址数值本身的差,而是指针的单元间距int y = ptr1-ptr2; //低位减高位printf("指针ptr1-ptr2的值(地址)是:%ld\n",y);  // 结果是-1,并非-4int z = ptr2-ptr1;  // 高位减低位    printf("指针ptr2-ptr1的值(地址)是:%ld\n",z);  // 结果是 1,并非 4    //---return 0;}


输出结果:

 

指针ptr0的值(地址)是:1245024
指针ptr1的值(地址)是:1245028
指针ptr0自身的地址是:1245052
指针ptr2的值(地址)是:1245032
指针ptr2地址保存的值arn[2]:300
指针ptr0的值(地址)是:1245028
指针ptr0地址保存的值:200
指针ptr0的值(地址)是:1245024
指针ptr0地址保存的值:100
指针ptr1-ptr2的值(地址)是:-1
指针ptr2-ptr1的值(地址)是:1

 


 

 

原创粉丝点击