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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qinghe0808/article/details/52613128

        一直以来,指针都是我在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



展开阅读全文

没有更多推荐了,返回首页