C语言的指针
来源:互联网 发布:淘宝的实拍保护 编辑:程序博客网 时间:2024/06/15 09:18
C语言的强大之处在于可以对内存进行直接操作和管理,但是同时对内存的管理和使用也让C语言变得更难掌握,因为Java中内存的管理是由虚拟机来完成的,开发人员不需要关心内存的申请和释放。其实指针就是一个变量,其值为另一个变量的地址-内存位置的直接地址。就像其他变量或常量一样,在使用指针存储其他变量地址之前,要对其进行声明。
一、指针的类型
int *ip; /* 一个整型的指针 */double *dp; /* 一个 double 型的指针 */float *fp; /* 一个浮点型的指针 */char *ch; /* 一个字符型的指针 */
#include<stdio.h>void main() {int t = 89;int *ip = &t;printf("%#x\n", ip);//指针存储的变量地址printf("%d\n", *ip);//取指针内存储的变量地址的对应的值getchar();}
注意:
int *ptr = NULL;//指针不确定指向哪个内存地址时,为NULL
void *v;//指针指向了变量的地址,但是变量的类型不确定,可以是任意类型
1、void指针是一种特别的指针,不确定指针的类型,也就是不确定指针的长度
void *vp
//说它特别是因为它没有类型
//或者说这个类型不能判断出指向对象的长度
2、任何类型的指针都可以赋值给void指针
void *p;
int *ip;
p=ip;
//不需转换
//只获得变量/对象地址而不获得大小
3.void指针赋值给其他类型的指针时都要进行转换
int *p=(int*)vp;
//转换类型也就是获得指向变量/对象大小
4.void指针不能复引用
*p//错误
因为void指针只知道,指向变量/对象的起始地址
而不知道指向变量/对象的大小(占几个字节)所以无法正确引用
5.void指针不能参与指针运算,除非进行转换
(int*)p++;
//p==p+sizeof(int)
二、指针的运算
1、指针的基本运算:+ - ++ --
#include<stdio.h>void main() {int t = 89;int *ip = &t;int *ip2 = &t;printf("地址ip2=%d\n", ip2);ip2++;*ip2 = 90;printf("%#x\n", ip);//指针存储的变量地址printf("%d\n", *ip);//取指针内存储的变量地址的对应的值printf("%d\n", *ip2);printf("地址ip2=%d\n", ip2);getchar();}
结果:地址ip2=11532044
0xaff70c
89
90
地址ip2=11532048
指针与数组的操作:
#include<stdio.h>void main() {int a[10] = { 1,25,4,6,35,8,9,65,8,85, };int *p = a;for (int i = 0; i < sizeof(a)/sizeof(int); i++){p++;printf("p=%d\n", *p);printf("地址p=%d\n", p);}getchar();}
结果:
p=25
地址p=19200436
p=4
地址p=19200440
p=6
地址p=19200444
p=35
地址p=19200448
p=8
地址p=19200452
p=9
地址p=19200456
p=65
地址p=19200460
p=8
地址p=19200464
p=85
地址p=19200468
p=-858993460
地址p=19200472
2、指针可以进行算数的比较运算:
指针可以用关系运算符进行比较,如 ==、< 和 >。如果 p1 和 p2 指向两个相关的变量,比如同一个数组中的不同元素,则可对 p1 和 p2 进行大小比较。
- C语言的指针
- C语言的指针
- C语言的指针
- C语言的指针
- C语言的指针
- C语言的指针
- C语言的指针
- C语言的指针
- C语言的指针
- C语言的指针
- C语言的指针
- C语言的指针
- c语言的指针
- C语言的指针
- c语言的指针
- C语言的指针
- C语言的指针
- C语言的指针
- 关于VS工具的好文章搜集
- 学习小记_1(几种数据传输方式)
- redis设置开机启动
- Spark入门实战系列--3.Spark编程模型(上)--编程模型及SparkShell实战
- android 下载 ios上传图片的角度显示问题
- C语言的指针
- 命名管道编程的原理及实现
- IE浏览器10 和11 前端没有传递cookie信息给后端的原因
- 国标慢充充电流程总结
- JQuery3.1.1源码解读(十五)【dom-domManip】
- 如何理解SVM | 支持向量机之我见
- DevOps是什么
- 网络设备Web登录检测工具device-phamer
- 1005. 继续(3n+1)猜想 (25)