超级通俗易懂讲“指针”

​1.指针的概念(来源于百度)——指针,是C语言中的一个重要概念及其特点,也是掌握C语言比较困难的部分。指针也就是内存地址,指针变量是用来存放内存地址的变量,在同一CPU构架下,不同类型的指针变量所占用的存储单元长度是相同的,而存放数据的变量因数据的类型不同,所占用的存储空间长度也不同。有了指针以后,不仅可以对数据本身,也可以对存储数据的变量地址进行操作。

2.指针的作用,占据的空间,指针数组,数组指针,多级指针(以32位平台为标准):

//int a = 0;//a就是一个int类型的变量
//int* p = &a;//p是一个int*类型的变量(也就是指针类型)
//它们之间的差距是什么呢?
//a,存放我们常见的数字比如1,2,3,1234。
//p,存放内存的地址,通过它存放的地址就可以找到地址里面的数据
//a的类型是int,它在操作系统里面占4个字节。
//p的类型是int*类型,它也占4个字节。
//那么如果是:
//char a = 0;
//char* p = &a;
//那么这里的a和p各占几个字节呢?是1和1吗?
//答案是a占一个字节,p仍然占4个字节。为什么呢?
//因为a的类型是char,只占一个,然而p的类型是char*类型的,
//char*类型是指针类型呀,指针类型仅仅占四个字节,哪怕是longlong类型的指针也是占四个字节




//数组指针:看后缀是指针。是指向数组的指针
//char* (*arr)[10];//先用括号将变量名跟*结合从而形成一个指针类型的变量
//指针数组:看后缀是数组。是一个数组,里面存放指针。
//int(*arr[10]);//[]的优先级高于*,所以变量名先跟[]结合从而形成一个指针数组




//多级指针:二级指针及以上都被称为多级指针
//int a = 0;//int类型的变量存放数据
//int* pa = &a;//一级指针存放普通变量的地址
//int** ppa = &pa;//int**类型(也就是二级指针)存放一级指针的地址
//*ppa == pa;//一次解引用拿到pa的数据也就是a的地址
//**ppa == a;//俩次解引用得到pa的地址里的数据也就是a的数据
//三级指针就是存放二级指针的地址,四级指针以以后以此类推


​​
3.​下面看一个用题目——逆序输出一串字符(可以有空格),里面就有指针相关的知识:

void invert(char arr[], int sz)
{
	char* pright = (arr + sz - 1);  //最右边元素(减去一个一是因为下标的个数是有效元素个数减一)
	char* pleft = arr;              //最左边元素
	//把左右两边的元素给交换掉
	while (pleft < pright)
	{
		char num = *pright;//pright和pleft是指针类型的,解引用拿到里面存放的值
		*pright = *pleft;//利用第三个元素来进行交换俩个元素的操作
		*pleft = num;
		pleft++;
		pright--;
	}
}

int main() {
	char arr[100] = { 0 };
	gets(arr);//读取字符串自能用gets,scanf不行
	int sz = strlen(arr);
	invert(arr, sz);
	printf("%s\n", arr);
	return 0;
}

4.野指针:比如我们malloc(动态内存分配)了一块内存空间,我们把这块空间给释放掉了,并没有把指针指向NULL,如果后续我们继续使用这块空间的话,就会造成越界访问,危害是非常之大的。建议把使用完了的指针置为NULL(也就是空指针);

5.关于指针的知识,这些都只是冰山一角。如果您有需要补充的,也可评论哦~;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值