#include<stdio.h>intmain(){int a =50;//a的本质是值int* b =&a;//b的本质是指针变量printf("b=%d\n", b);//这里直接打印出b的值//b作为一个指针变量,直接打印出来的就是a的内存地址,而不是a的值printf("*b=%d\n",*b);//对b表示的内存地址进行*操作(取值操作)//利用地址取值后,得到的就是存储于这个地址的a的值printf("&b=%d\n",&b);//对b变量进行取地址操作//b虽然是存储地址,但其作为指针变量,本质还是变量//变量就必然需要内存来存储,也必然有自己的内存地址//所以,取地址后的数据其实就是b的内存地址}
#include<stdio.h>voidmain(){int score[7]={95,89,56,78,45,59,77};int sum =0;int* p1;for(p1 = score; p1 <&(score[7]); p1++){//这里第一个位置还可以用p1=&(score[0])printf("%d\n",*p1);}}
ps:数组名就是数组首位元素的地址
指针运算
intmain(){int* p[5]={1,2,3,4,5};int* num =&p[0];int* pnum = num +2;
ptrdiff_t n =(pnum +1)- num;//两个指针变量之间做差,得到结果是一种有符号整型//表示两个指针在内存中的距离(以数组元素长度为单位,而不是字节长度)printf("*num=%d,*pnum=%d\n",*num,*pnum);printf("(pnum+1)-num=%d\n", n);return0;}