黑马程序员技术交流社区

标题: c疑惑? [打印本页]

作者: JAH562    时间: 2014-11-2 22:33
标题: c疑惑?
#include <stdio.h>
void main()

{
char str[100];


char *demp=str;
gets(str);

while(*str!='\0'){

if(*str>='a' && *str<='z'){
        *str-='a'-'A';
}
str++;

}

运行时,str++  报错怎么 回事啊    我想把输出的字符都变成大写
作者: x65396731    时间: 2014-11-3 08:51
可能错在char *demp=str;
作者: Lizzie    时间: 2014-11-3 10:08
char *demp=str;在这里你是定义了一个指针来指向str这个数组的,所以在循环判断的时候是demp++,指针依次指向下一个字符来进行判断的

  1. #include <stdio.h>
  2. void main()

  3. {
  4.     char str[100];
  5.    
  6.    
  7.     char *demp=str;
  8.     gets(str);
  9.    
  10.     while(*demp!='\0')
  11.     {
  12.         
  13.         if(*demp>='a' && *demp<='z')
  14.         {
  15.             *demp-=('a'-'A');
  16.         }
  17.         
  18.         printf("%c",*demp);
  19.         demp++;

  20.     }
  21.     printf("\n");
  22. }
复制代码

作者: 雪寒    时间: 2014-11-3 10:23
本帖最后由 雪寒 于 2014-11-3 10:33 编辑

首先你得明白指针和一维数组的区别

指针定义: 指针是包含内存地址的变量,一般的指针变量直接包含特定的值,指针变量包含的是某一特定数据类型的内存地址。

一维数组的定义: 数组是一组连续的内存位置,它们都具有相同的名称和类型。数组名表示数组的首地址。

定义上的区别: 指针是个变量,可以进行加或减运算,可以改变其指向的内存地址值,而数组是个常量,其内存地址的值不可改变。

可见,指针变量里面存放的是地址,数组名表示数组的首地址。也就是说str不可改变,不能str++;要想用指针遍历数组,得把数组首地址赋给指针变量,让指针变量进行加减运算。也就是你写的char *demp=str;然后通过指针变量去遍历数组就OK了,完整程序如下:

  1. #include <stdio.h>
  2. void main()

  3. {
  4.         char str[100];

  5. char *demp=str;
  6. gets(str);
  7. while(*demp!='\0'){

  8. if(*demp>='a' && *demp<='z'){
  9.         *demp-='a'-'A';
  10. }
  11.   demp++;
  12. }
  13. }
复制代码



作者: doudou33420    时间: 2014-11-3 11:42
学习 学习
作者: JAH562    时间: 2014-11-3 23:06
刚发现 是这个问题




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2