c语言学习——指针

        本文是我在学习和观看指针讲解视频的一些关于指针的理解,可能有一些问题,如有问题,欢迎指出交流

一.什么是指针

        首先我们需要了解,电脑与芯片的内存均有自己的编号,每一个编号代表一个字节,定义变量的变量名的地址为分配的内存的首个地址值,并且将内容以栈的形式存入;

        注意:地址也被称为指针。

       而 指针变量,是存储其他指针或变量的地址的变量

例如:

int a = 1;
int * p = &a;    //*代表指针变量,int代表指向的地址变量

而*p可以对p所存的地址的变量直接改变,

二.认识指针

1.指针变量大小:

        1.大小:取决于一个地址存放所需要的空间,32位有32根地址线-32bit,所以是4Byte;其他变量存储自己类型大小的数据,变量名有自己的地址,而指针变量存着指向变量的地址,

        2.指向不同类型的指针的不同点:

                在*p——对指向的变量进行改变时,会改变类型大小的字节数据,int改变4个字节,char改变一个字节。

                在对指针变量进行加减时,指针会跳到下一个变量,所以会按照指向的类型存储字节大小增减

2.指针使用注意:

1.指针使用的一些问题/错误

        1.对一个随机的地址,解引用改变值,会造成错误;可能是指针未初始化,也有可能是接收了一个局部变量(保存后局部变量释放空间)

        2.在函数中,让指针指向了超过指向类型大小的地址,即不属于这个类型的空间

            

2.指针使用注意点

        1.指针定义后要初始化,即使暂时不用也要赋值NULL;

        2.因为NULL也是不能改变的内存,所以使用前要注意判断p是否=NULL;

三.指针的运算

1.加减整数:

        会按照指向的类型的大小字节进行增减:

例如

int* pointi_test = &test_a_num;
char* pointc_test = &test_a;

pointi_test+1指向加4后的地址,pointc_test+1指向加1后的地址.

2.减一个指针:

        两个指针间元素的个数,且只有指向同一块空间的指针可以相减(例如:同一种类型)

例如:

            int arr[5] = {0};
			int* pointi_test = &arr;
			printf("%d\n", &arr[4] - &arr[0]);
			int* pointi_test1 = pointi_test;
			for (; pointi_test != &arr[4]; pointi_test++);
			printf("%d\n", pointi_test - pointi_test1);

运行结果均为4;

3.比较

        规定:数组元素指针可以与其后一个元素的地址比较,但是不能与第一个元素之前的地址比较

四.二级指针

        指用来存储一级指针变量地址的变量,并且使一级指针变量建立起联系,使得一级指针指向的变量可以建立起联系(如:用指针与一维数组表示出二维数组)

例如

	int test = 0;
	int* pa = &test;	//一级指针
	int** ppa = &pa;	//二级指针

关于指针的知识点:

1.&——取地址符

2.%p——以地址形式

3.数组:

        数组名是存储的首元素地址,int a[2];a与&a[0]是一样的,对数组队员取地址就是通过数组名去计算;

        而a[1] == *(a+1)。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值