今天是本人学习C语言第5天,自学时发现关于scanf用在指针变量上的问题,使我我对指针的理解有了进一步认识,特记录一次。
概述
定义一个变量包含有四个元素:int cc = 10;0x000001
1.类型 2.变量名字 3.内容/值/元素 4.地址
而scanf的用法是:scanf("输入控制符",输入参数);
功能:将用户从键盘输入的字符转化为“输入控制符”所规定格式的数据,输入参数的内容,存入到地址的变量中。
给大家举个例子:
指针
指针是一个特殊的变量,它里面存储的内容一般被人们解释成为内存里的一个地址。
定义一个指针变量也包含四个元素:
1.指针类型和指针所指向的类型 2.指针的名字 3.定义指针本身的地址
4.指针的内容或者叫指针本身所占据的内存区 指针内容可以包含地址可以包含值/元素。
scanf用在指针变量报错问题
当我们对指针进行取地址时:&cc2代表指针取的是 int cc2 中的内容。cc2的内容中有一个地址0x000001(cc的地址),cc2指针本身的地址是0x00000A。当scanf(“%d”&cc2)时会有两个错误让系统报错奔溃.
1、scanf输入控制符为%d,而取cc2指针地址的内容是一个地址(cc的地址),输入控制符和输入参数错误,算法不合法导致编译报错。
2、取地址是cc2的地址,cc2指针地址的内容是cc的地址,而不是一个元素,而cc地址中的内容未初始化,所以cc2是一个未初始化的野指针,算法不合法导致编译报错。
正确代码
因为指针int*cc2指针已经对cc进行取地址,取值后*cc2指针的内容已经是cc的地址,所以scanf不需要再对cc2进行取地址了,直接对cc地址进行用户输入参数,最后输出提示语,比大小进行交换。
今天浅谈关于scanf和函数指针变量用法的理解,如有错误的地方,向大佬们请教,纠正错误,感谢阅览。