C语言指针和scanf函数20211018

 代码1

#include<stdio.h>
int main()
{
   char i = 'a';
   char *arr=&i;
   scanf("%c",arr);
   printf("%c",*arr);
   return(0);
}

 代码2

#include<stdio.h>
int main()
{
   char *arr;
   scanf("%c",arr);
   printf("%c",*arr);
   return(0);
}

代码1和代码2实现的功能是一样的吗,都可以运行吗?


代码2错误,为什么?

为什么不能这么操作?

大家首先来看一下,scanf函数

    scanf(“格式控制字符串”, 地址表列);

    scanf("%d%d",&a,&b);

    例如:&a、&b分别表示变量a和变量b的地址。

    这个地址就是编译系统在内存中给a、b变量分配的地址

    在C语言中,使用了地址这个概念,这是与其它语言不同的。

    应该把变量的值和变量的地址这两个不同的概念区别开来。

    变量的地址是C编译系统分配的,用户不必关心具体的地址是多少。

所以问题出在哪?

 在进行代码2的时候  scanf("%c",arr);//中arr有地址吗或者有系统编译的地址吗?

#include<stdio.h>
int main()
{
   char *arr;
   scanf("%c",arr);
   printf("%c",*arr);
   return(0);
}

 我们来验证一下。

#include<stdio.h>
int main()
{
 //  char i = 'a';
   int *arr;
//   scanf("%c",arr);
   printf("%d",arr);
   return(0);
}

 很可惜没有地址,那scanf能有效运行吗,意思是scanf在输入带输入字符的时候,能把想要输入的数据,给到地址吗,不能!所以代码2运行错误。

定义指针的时候,需要我们注意,指针变量的值。

指针是一个地址,而指针变量是存放地址的变量。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值