android107 指针入门

简介:
#include <stdio.h>
#include <stdlib.h>
//指针就是内存地址 
//32为操作系统最大是4G内存,32为系统则是2的32次方, 
//所以只能表示2的32次方个内存地址, 也就是2的32次方个字节就是4G. 
main(){
       int i;//i是内存空间的别名 ,i里面保存的是内存地址, 
       i = 3;
       printf("%#x\n", &i);
       system("pause"); 
}
复制代码

 

复制代码
#include <stdio.h>
#include <stdlib.h>

main(){
       //野指针:没有赋值的指针 
       int* p;
       int i;
       double d = 3.14;
       p = &d; //不是野指针了, 
       //*p = 23;
       printf("%#x\n", p);//打印地址,p里面存的是地址 
       printf("%lf\n", *p);
       system("pause"); 
}



/*##*的三种用法
1. 乘法
2. int* p:定义一个指针变量p,p中存放一个内存地址,这个地址所存放的数据规定是int型
3. *p:取出p中保存的内存地址存放的数据

##数据传递
* 所有语言所有平台,都只有值传递,引用传递传递的值是内存地址
*/


#include <stdio.h>
#include <stdlib.h>
void swap(int* p, int* q){
     int temp = *p;
     *p = *q;
     *q = temp;
}
main(){
       int i = 3;
       int j = 5;
       printf("i=%d\n", i);
       printf("j=%d\n", j);
       swap(&i, &j);
       printf("i=%d\n", i);
       printf("j=%d\n", j);
       system("pause"); 
}
复制代码

 

复制代码
#include <stdio.h>
#include <stdlib.h>
void function(int* p, int* q){
     *p += 15;
     *q += 15;
}
main(){
       int i = 10;
       int j = 20;
       function(&i, &j);
       printf("%d\n", i);
       printf("%d\n", j);
       system("pause"); 
}





#include <stdio.h>
#include <stdlib.h>
void function(int** p){
     int i = 3;
     printf("i的地址为%#x\n", &i);
//p就是取出p内存空间的值
//*p:就是取出p内存空间值的内存空间的值, *p = &i;//修改P所指向的内存空间值的内存空间的值 } main(){ int* mainp;//mainp在栈中存的是地址,指向堆中的一个int数据 的内存空间 。 function(&mainp);//&mainp在栈中存的是地址的地址也就是 mainp的地址,也就是指向mainp的内存空间。 printf("主函数中获取i的地址为%#x\n", mainp); //数据幻影 printf("主函数中获取i的值为%d\n", *mainp);//-2因为i是局部变量已经销毁了 system("pause"); }
复制代码

                                                            

内存分析:0级指针,一级指针,二级指针都有,                   二级指针是曾曾用名,一级指针是曾用名。

复制代码
#include <stdio.h>
#include <stdlib.h>

main(){
       //char arr[] = "hello"; 
       int arr[5] = {1,2,3,4,5};
       
       printf("%#x\n", &arr[0]);//0x22ff50 
       printf("%#x\n", &arr[1]);
       printf("%#x\n", &arr[2]);
       printf("%#x\n", &arr[3]);
       //arr =  
       printf("数组名字的地址%#x\n", &arr);//也是输出第0个元素的地址 
       printf("数组名字的地址%#x\n", arr);//也是输出第0个元素的地址 
       //char* p = &arr;
       int* p = &arr;
       //+1表示向右偏移一个单位 
       printf("%d\n", *(p+0));// 1
       printf("%d\n", *(p+1));//2
       printf("%d\n", *(p+2));//3
       printf("%d\n", (p+2)-p); //2
       system("pause"); 
}
复制代码

 

复制代码
#include <stdio.h>
#include <stdlib.h>

main(){
       char* cp;
       int* ip;
       short* lizhip;
       int i;
       char c;
       cp = &c;
       ip = &i;
       //指针的长度都是4个字节 
       printf("%d\n", sizeof(cp));//4
       printf("%d\n", sizeof(ip));//4
       printf("%d\n", sizeof(lizhip));//4
        printf("%d\n", (p+2)-p); //2,偏移量。 
       printf("%d\n", cp-ip);//出错, 连续内存空间相加减是可以的,非连续的内存空间相加减是没有意义的, 
       system("pause"); 
}
复制代码

 


本文转自农夫山泉别墅博客园博客,原文链接:http://www.cnblogs.com/yaowen/p/4979472.html,如需转载请自行联系原作者


相关文章
|
9月前
|
存储 NoSQL 编译器
【C语言】指针的神秘探险:从入门到精通的奇幻之旅 !
指针是一个变量,它存储另一个变量的内存地址。换句话说,指针“指向”存储在内存中的某个数据。
299 7
【C语言】指针的神秘探险:从入门到精通的奇幻之旅 !
|
10月前
|
XML 数据库 Android开发
探索Android开发:从入门到精通的旅程
在这篇文章中,我们将一起踏上一段激动人心的旅程,通过深入浅出的方式,解锁Android开发的秘密。无论你是编程新手还是有经验的开发者,本文都将为你提供宝贵的知识和技能,帮助你构建出色的Android应用。我们将从基础概念开始,逐步深入到高级技巧和最佳实践,最终实现从初学者到专家的转变。让我们开始吧!
205 3
|
11月前
|
存储 前端开发 测试技术
Android kotlin MVVM 架构简单示例入门
Android kotlin MVVM 架构简单示例入门
169 1
|
11月前
|
存储 编译器 C语言
C++入门2——类与对象1(类的定义和this指针)
C++入门2——类与对象1(类的定义和this指针)
153 2
|
11月前
|
开发框架 移动开发 Android开发
安卓与iOS开发中的跨平台解决方案:Flutter入门
【9月更文挑战第30天】在移动应用开发的广阔舞台上,安卓和iOS两大操作系统各自占据半壁江山。开发者们常常面临着选择:是专注于单一平台深耕细作,还是寻找一种能够横跨两大系统的开发方案?Flutter,作为一种新兴的跨平台UI工具包,正以其现代、响应式的特点赢得开发者的青睐。本文将带你一探究竟,从Flutter的基础概念到实战应用,深入浅出地介绍这一技术的魅力所在。
252 7
|
12月前
|
Android开发 开发者
安卓开发中的自定义视图:从入门到精通
【9月更文挑战第19天】在安卓开发的广阔天地中,自定义视图是一块充满魔力的土地。它不仅仅是代码的堆砌,更是艺术与科技的完美结合。通过掌握自定义视图,开发者能够打破常规,创造出独一无二的用户界面。本文将带你走进自定义视图的世界,从基础概念到实战应用,一步步展示如何用代码绘出心中的蓝图。无论你是初学者还是有经验的开发者,这篇文章都将为你打开一扇通往创意和效率的大门。让我们一起探索自定义视图的秘密,将你的应用打造成一件艺术品吧!
146 10
|
IDE Java 程序员
安卓应用开发入门:打造你的第一个“Hello World”
【9月更文挑战第11天】在编程的世界里,每一个初学者的旅程都从一个简单的“Hello World”开始。本文将带领安卓开发的新手们,通过简单直观的方式,一步步构建出自己的第一个安卓应用。我们将探索安卓工作室(Android Studio)的安装、项目的创建,以及如何运行和调试你的应用。无论你是编程新手还是想扩展技能的老手,这篇文章都将为你打开一扇通往安卓世界的大门。
377 8
|
10月前
|
XML IDE Java
安卓应用开发入门:从零开始的旅程
【10月更文挑战第23天】本文将带领读者开启一段安卓应用开发的奇妙之旅。我们将从最基础的概念讲起,逐步深入到开发实践,最后通过一个简易的代码示例,展示如何将理论知识转化为实际的应用。无论你是编程新手,还是希望扩展技能的软件工程师,这篇文章都将为你提供有价值的指导和启发。
140 0
|
IDE Java API
安卓应用开发入门:打造你的第一个"Hello World"
【9月更文挑战第11天】在探索安卓开发的海洋中,每个开发者的航行都从简单的"Hello World"开始。本文将作为你的航标,引导你驶向安卓应用开发的精彩世界。我们将一起启航,通过浅显易懂的语言和步骤,学习如何构建并运行你的第一个安卓应用。无论你是编程新手还是希望扩展技能的老手,这篇文章都将为你提供所需的知识和信心。准备好了吗?让我们揭开安卓开发的神秘面纱,一起创造些令人兴奋的东西吧!
|
11月前
|
Web App开发 编解码 视频直播
视频直播技术干货(十二):从入门到放弃,快速学习Android端直播技术
本文详细介绍了Android端直播技术的全貌,涵盖了从实时音视频采集、编码、传输到解码与播放的各个环节。文章还探讨了直播中音视频同步、编解码器选择、传输协议以及直播延迟优化等关键问题。希望本文能为你提供有关Andriod端直播技术的深入理解和实践指导。
317 0