您的位置 首页 > 腾讯云社区

NDK启航篇——C语言基础(指针)---longzeqiu

昨天已经介绍了下什么是指针,今天继续讲指针为什么指针要有类型因为类型不同的指针所取的内存长度不同,取值会出现问题,比如int 类型的指针,接收double类型的变量地址。//尖括号代表系统类库,std表示标准,io表示输入输出 引入标准输入输出 #include<stdio.h> //lib表示类库 引入标准类库 #include<stdlib.h> main(){ int a = 10; //取出a的地址,赋值给指针p int *p = &a; //#x表示十六进制,取出a的地址 println("%#x",p); //取出a地址里存的值 println("%d",*p); double j = 34.1; p = &j; //#x表示十六进制,取出j的地址 println("%#x",p); //取出j地址里存的值 println("%lf",*p); system("pause"); }

如上代码运行你会发现取出来的值为0.00000,原因就是指针的类型不匹配(通过4字节读取8字节的内容)

空指针(NULL) 空指针的默认值为0操作系统不准许访问内存地址0X000000 void main(){ int i = 10; //定义一个空指针j int *j = NULL; //#x表示十六进制,取出j的地址 printf("%#xn",j); //取出j地址里存的值 printf("%dn",*j); system("pause"); }多级指针(二级)指针保存的是变量的地址,保存的这个变量还可以是一个指针变量void main(){ //定义一变量i int i = 10; //把i的地址赋值给j int *j = &i; //把j的地址赋值给k int **k = &j; //k存的j的地址,j上存的i的地址 printf("j:%#x,k:%#xn",j,k); //加一个*是i的地址,加两个*是i的值 ** k = 20; printf("%dn",i); getchar(); }

加一个*是i的地址,加两个*是i的值(最多三级指针)

使用场景 动态内存分配二维数组指针运算(对数组的操作) 注意C中数组[]必须写在变量名的后面!数组变量名:i就是数组的首地址数组在内存中是连续存储的 数组变量名++向前移动sizeof(数据类型)个字节 数组变量名--向后移动sizeof(数据类型)个字节void main(){ int i [] = {11,12,13,14,15}; //数组变量名:i就是数组的首地址 printf("%#xn",i); printf("%#xn",&i[0]); //数组的变量名就是地址 int *j = i; printf("%dn",*j); //指针加法 j++;//j++向前移动sizeof(数据类型)个字节 printf("%dn",*j); getchar(); }使用场景 一般在数组遍历时才有意义因为数组在内存中是线性排列的通过指针给数组赋值代码如下:void main(){ //定义有五个元素的数组i int i [5] ; //把数组i的地址赋值给指针j int *j = i; //数组的值 int k = 0; //通过指针给数组赋值 for(;j<i + 5;j++){ *j = k; k++; } }

今天就先到这里啦,明天继续写函数指针,欲速则不达,慢慢来不着急。

---来自腾讯云社区的---longzeqiu

关于作者: 瞎采新闻

这里可以显示个人介绍!这里可以显示个人介绍!

热门文章

留言与评论(共有 0 条评论)
   
验证码: