爱俯卧撑的123 发表于 2022-1-10 14:33:19

数组指针问题


int main()

{
        char str;
        char (*p)=&str;
        int i;
       
        printf("请输入字符串:");
        fgets(str,9,stdin);
        for(i=0;i<9;i++)
        {
          printf("%c\n",*(*p+i));
        }
        return 0;   
}




各位大佬,因电脑问题无法上传结果图片,如输入abcdefghi,打印结果为:
a
b
c
d
e
f
g
h
a

求解答,为何最后一个元素变为a了

村里小黑 发表于 2022-1-10 14:54:21

#include <stdio.h>

int main()

{
      char str;
      char (*p)=&str;
      int i;
      
      printf("请输入字符串:\n");
      fgets(str,9,stdin);
      for(i=0;i<9;i++)
      {
          printf("%c\n",*(*p)+i);
      }
      return 0;   
}

傻眼貓咪 发表于 2022-1-10 15:18:48

#include <stdio.h>

int main(){
        char str;
        char (*p) = &str;
       
        printf("请输入字符串:");
        fgets(str, 9, stdin);
       
        for(int i = 0; i < 9; i++)
        printf("%c\n", **p+i); // <------ 这里 ------
       
        return 0;   
}

jhq999 发表于 2022-1-10 15:23:54

本帖最后由 jhq999 于 2022-1-10 15:24 编辑

不知道你怎么出现a,应该是'\0'

爱俯卧撑的123 发表于 2022-1-11 14:10:07

傻眼貓咪 发表于 2022-1-10 15:18


找到原因了,感谢,请问为何会把()去掉就可以了?因为老乌龟课件上的例子是带()的

爱俯卧撑的123 发表于 2022-1-11 14:11:37

jhq999 发表于 2022-1-10 15:23
不知道你怎么出现a,应该是'\0'

可能是编译器问题,我用的是DEVc

傻眼貓咪 发表于 2022-1-11 15:00:03

本帖最后由 傻眼貓咪 于 2022-1-11 15:01 编辑

爱俯卧撑的123 发表于 2022-1-11 14:10
找到原因了,感谢,请问为何会把()去掉就可以了?因为老乌龟课件上的例子是带()的

我猜课件上的例子是:#include <stdio.h>

int main(){
        char *str = "HelloWorld"; // 常量字符串
        char *(*p) = &str;
       
        for(int i = 0; i < 10; i++){
                printf("%c\n", *(*p+i)); // 如你所愿,带括号
        }
       
    return 0;   
}

爱俯卧撑的123 发表于 2022-1-11 16:54:42

傻眼貓咪 发表于 2022-1-11 15:00
我猜课件上的例子是:

#include <stdio.h>

int main()
{
      int temp = {1, 2, 3, 4, 5};
      int (*p2) = &temp;
      int i;

      for (i = 0; i < 5; i++)
      {
                printf("%d\n", *(*p2 + i));
      }

      return 0;
}


是这个,所以是因为char和int类型的不同嘛

傻眼貓咪 发表于 2022-1-11 17:31:30

爱俯卧撑的123 发表于 2022-1-11 16:54
#include

int main()


#include <stdio.h>

int main(){
    char temp = {'a', 'b', 'c', 'd', 'e'};
    char (*p2) = &temp;
    int i;

    for (i = 0; i < 5; i++){
      printf("%c\n", *(*p2 + i)); // 如你所愿,有括号
    }

    return 0;
}

/*
以下字符数组/字符串类型:

char *a = "Hello";
char b = "Hello";
char c = {'H', 'e', 'l', 'l', 'o'};

以上三种不一样东西
*/

爱俯卧撑的123 发表于 2022-1-11 20:39:20

傻眼貓咪 发表于 2022-1-11 17:31


谢谢您{:5_108:}

爱俯卧撑的123 发表于 2022-1-11 20:46:03

傻眼貓咪 发表于 2022-1-11 17:31


#include<stdio.h>

int main()

{
      char str;
      char (*p)=&str;
      int i;
      
      printf("请输入字符串:");
      fgets(str,10,stdin);
      for(i=0;i<9;i++)
      {
          printf("%c\n",*(*p+i));
      }
      return 0;   
}
fgets函数里我把9改为10,也可以完整输出abcdefghi,是不是说明,fgets函数获得的字符串中,'\0'也占其中一个位置。

jhq999 发表于 2022-1-11 21:04:10

爱俯卧撑的123 发表于 2022-1-11 20:46
#include

int main()


数组越界了

傻眼貓咪 发表于 2022-1-11 21:08:09

爱俯卧撑的123 发表于 2022-1-11 20:46
#include

int main()


不建议这样做(越界),你定义长度多少,就输入多少

傻眼貓咪 发表于 2022-1-11 21:16:58

本帖最后由 傻眼貓咪 于 2022-1-11 21:26 编辑

爱俯卧撑的123 发表于 2022-1-11 20:46
#include

int main()


#include <stdio.h>

int main()
{
    char str, c;
    char (*p) = &str;
    int i = 0;
   
    printf("请输入字符串:");
    while((c = getchar()) != '\n'){
      str = c;
    }
   
    for(i = 0; i < 9; i++)
    printf("%c\n",*(*p + i)); // 如你所愿,有括号
   
    return 0;
}
#include <stdio.h>

int main()
{
    char str, c;
    char (*p) = &str;
   
    printf("请输入字符串:");
    fgets(str, 10, stdin); // 最多输入九个字符,第十个无效(fgets() 取 num-1 个字符,num 为字符串长度)
   
    for(int i = 0; i < 9; i++)
    printf("%c\n",*(*p + i)); // 如你所愿,有括号
   
    return 0;
}请输入字符串:abcdefghi
a
b
c
d
e
f
g
h
i

爱俯卧撑的123 发表于 2022-1-12 09:58:13

傻眼貓咪 发表于 2022-1-11 21:16


完全明白了,狠狠的感谢{:5_106:}

tomok 发表于 2022-1-12 11:10:24

学习代码
页: [1]
查看完整版本: 数组指针问题