写点什么

C 语言(二):指针基础

用户头像
Android架构
关注
发布于: 59 分钟前

//指针有类型,地址没有类型


//地址只是开始的位置,类型指的是读取什么位置结束


void main() {


int i = 88;


int *p = &i;


double j = 98.2;


//赋值为 double 类型变量的地址


p = &j;


printf("double size:%d\n",sizeof(double));


printf("%#x,%lf\n",p,*p);//*p 的值为 0.000000,


getchar();


}


//见图一效果图


//2.NULL 空指针


void main() {


int i = 9;


int *p = NULL;


//p = &i;


//空指针的默认值为 0


printf("%#x\n", p);


//访问内存地址 0x000000 操作系统不允许


//p = 10;//操作系统不允许访问


printf("%d\n",*p);


getchar();


}


//见图二效果图


//3.多级指针(二级指针)


//指针保存的是变量的地址,保存的这个变量还可能是一个指针变量/*


void main() {


int a = 45;


//p1 上保存的 a 的地址


int *p1 = &a;


//p2 上保存的 p1 的地址


int **p2 = &p1;


printf("p1:%#x,p2:%#x\n", p1,p2);


**p2 = 88;


printf("a:%d\n", a);


*p1 = 78;


printf("a:%d", a);


《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》
浏览器打开:qq.cn.hn/FTe 免费领取
复制代码


getchar();


}


//见图三效果图


//4.指针的运算


//指针的运算,一般在数组遍历时才有意义,基于数组在内存中线性排列的方式


void main() {


//数组在内存中连续存储


int ids[] = {78,92,52,45};


//数组变量名称:ids 就是数组的首地址


printf("%#x\n",ids);//0x1dfb28


printf("%#x\n",&ids);//0x1dfb28


printf("%#x\n",&ids[0]);//0x1dfb28


//ids 首地址


//ids 等价于 &ids[0], ids+1 等价于 &ids[1]


//结论:ids+i 等价于 &ids[i]


//*ids 等价于 ids[0] . *(ids+1)等价于 ids[1]


//结论: *(ids+i)等价于 ids[i]


//总结:ids+i 等价于 &ids[i], *(ids+i)等价于 ids[i]


//指针变量


int *p = ids;


//p 是变量指针,ids 常量指针


//p = &i; 可以


//ids = &i;不可以


printf("%d\n",*p);//78


//指针的加法


p=p+2;//p++向前移动 sizeof(数据类型)个字节


printf("%d\n", *p);//52


p--;


printf("%d\n", *p);//92


getchar();


}


//见图四效果图


//5 通过指针给数组赋值


void main() {


int uids[5];


//高级写法


//int i = 0;


//for (; i < 5; i++){


// uids[i] = i;


//}


//早些版本的写法


int *p = uids;


int i = 0;


for (; p < uids+5; p++ ) {


*p = i;


i++;


}


getchar();


}


//6.函数指针


int msg(char* msg,char* title) {


MessageBox(0,msg,title,0);


return 0;


}


void main() {


//msg();


printf("%#x\n", msg);


printf("%#x\n", &msg);


//函数指针


//函数返回值类型,函数指针的名称,函数的参数列表


int(fun_p)(char msg, char* title) = msg;


fun_p("消息内容","标题");


getchar();


}


//见图五效果图


//7.回调函数


int add(int a,int b) {


return a + b;


}


int minus(int a, int b) {


return a - b;


}


//msg 函数需要传递一个函数指针参数


//类似于我们 Java 中的回调函数


void msg(int(*func_p)(int a, int b),int m, int n) {


int r = func_p(m, n);


printf("%d\n",r);


}


void main() {


//加法


msg(add,55,45);


//减法


msg(minus,55,45);


getchar();


}


//见图六效果图


//用随机数生成一个数组,写一个函数查找最小的值,并返回最小数的地址。

用户头像

Android架构

关注

还未添加个人签名 2021.10.31 加入

还未添加个人简介

评论

发布
暂无评论
C语言(二):指针基础