C语言的指针

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 进行大小比较。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值