【C语言】菜鸟的指针入门

        一直以来,指针都是我在C语言部分的一大硬伤,因为当初基础概念弄不清楚,导致后来的听课如同听天书。今天,老师帮我们重新梳理了指针的相关知识,虽然只是一些概念性的,由于时间关系没有深入讲解,但这次我好像对指针了解一些了,以下是我的收获。


理解指针:

    对于int * p来说:

指针的内容—— 别人的地址

指针的地址—— &p

指针指向的内容—— *p


理解指针类型:

为了方便理解指针类型,我们要明白C语言中各变量类型在内存中占的字节数?

Char——1KB       Short——2KB   int——4KB     long——4KB

float——4KB        double——8KB

  

   那么加了指针以后,不同指针类型的输出结果又是什么呢?

        printf("%d\n", sizeof(char*));
	printf("%d\n", sizeof(short*));
	printf("%d\n", sizeof(int*));
	printf("%d\n", sizeof(long*));
	printf("%d\n", sizeof(float*)); 
	printf("%d\n", sizeof(double*));



   根据结果,我们可以知道,不论是什么指针类型,在32位平台下永远只占4个字节,在64位平台下占8个字节。

   那么有一个问题,既然指针类型占的字节数相同,为什么还要这么多种指针类型呢?不能用一种指针类型表示所有吗?
   其实这些指针类型并非无用,它们不仅在解引用操作时能够决定访问字节大小的权限,而且还在指针运算(加/减)的过程中起到了作用

具体有以下示例:

        int num = 0x11223344;	//在内存中储存为 44 33 22 11
	char *p = #          
	p = p1+1;		//因为char型一次访问1个字节,现在我们想访问第二个字节
	*p = 0x55;		//解引用,修改此字节值为55,num = 0x11 22 55 44
	p = p1-1;		//同样,访问第一个字节
	*p = 0x66;		//修改此字节为66,num = 0x11 22 55 66

	int *p1 = #		//int型一次访问4个字节
	int *p2 = #	
	*p1 = 55;		//解引用,则此时num = 0x00 00 00 37
	*p2 = 0x55;		//num = 0x00 00 00 55



  • 9
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值