马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 YiMingC 于 2019-4-25 17:50 编辑
关于22课动动手,代码如下,有两个问题:
1、不太理解为什么读到第一个空字符的时候i会被变成空格符的ascll码+1。
2、甲鱼老师在课程中说避免使用野指针,那我如果指针内的地址需要像这题一样在用户输入后再加入,那是不是只能先随便定义一个字符变量a,把指针的地址绑定到a的地址上再进行使用呢?
3、关于指针还是不太理解,比如一个指针:*pa,到底是pa存放地址还是*pa存放地址呢?在21课视频里将pa放入printf()函数打印出的是地址,*pa又是值,到底是谁在存放地址啊....#include <stdio.h>
void main()
{
int i = 0;
char ch,a;
char *str=&a;
printf("请输入一个字符串:");
for (;(ch = getchar())!='\n';i++)
{
printf("%d",i);
*(str+i)=ch;
printf("%c\n",*(str+i));
}
printf("您总共输入了%d个字符!\n",i+1);
}
1.对于局部变量,因为是定义在栈上的,所以地址是连续的且先定义的变量地址更高(地址的值更大)
对于题中的 i 和 a , 因为 i 是先定义的,所以 i 的地址更高,且 a 是字符型占一个字节,所以 i 的地址就是 a 的地址+1
如果 i 的地址是 0x00000006, a 的地址就是 0x00000005(你可以试试改变定义的顺序,改完后程序也会正常 )
指针 str 初始指向的是 a 的地址,i = 1 的时候,str + i == &a + 1, 即 str + i == &i ,这时候你再用*(str + i) = ch 就等价于
i = ch, 所以 i 的值就会改变,而且 i 是由你输入的第二个字符的ASCII值所决定的,这就是你的 i 变成33的原因了(i = 32后 自增)
2.可以使用NULL呀,
char *str = NULL;
str = &a;
这样的话str刚开始是不指向任何地址的
欢迎指正
|