指针问题求解答…….

指针问题求解答,问问大噶,这个p[2]是什么意思,p不是指针变量吗

img

*p指向了a[1]
所以p[0]=a[1] p[1]=a[2] p[2]=a[3]
第四个元素,也就是54


A[B]
*(A+B)
*(B+A)
B[A]
//以上四行等价

"abc"[1]
*("abc"+1)
*(1+"abc")
1["abc"]
//以上四行等价

A[0]
*(A)
0[A]
//以上三行等价

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/7708109
  • 你也可以参考下这篇文章:求指定值为x的结点的双亲结点p
  • 除此之外, 这篇博客: 通过指针变量p去掉字符串中字母之间的星号中的 通过指针变量p去掉字符串中字母之间的星号 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    如题。

    • Sample Input
    ****A**B***CD*EF*****
    
    • Sample Output
    ****ABCDEF*****
    
    • 代码
    #include <stdio.h>
    #include <string.h>
    
    int main(int argc, char const *argv[]) {
      char s[100] = "\0";
      char *p[100];
      int i = 0, l, end;
      scanf("%s", s);
      while (s[i] == '*') {
        p[i] = &s[i];
        i++;
      }/*指向字符串最开始的'*'号*/
      for (int j = i; j < strlen(s); j++) {
        if(s[j] != '*') {
          p[i++] = &s[j];/*读取字符串中字母*/
          end = j;/*记录最后一个字母位置*/
        }
      }
      for (int j = end + 1; j < strlen(s); j ++) {
        p[i++] = &s[j];/*指向字符串结束的'*'号*/
      }
      for (int j = 0; j < i; j++) {
        printf("%c", *p[j]);
      }
      return 0;
    }
    

    陕西科技大学 C语言程序设计课作业 指针-20190327 第三题

  • 以下回答来自chatgpt:

    指针变量p[2]的含义是对指针变量p进行偏移操作,即表示指针p指向的内存地址后面第二个元素的值。假设p是一个指针变量,类型为T,那么p[2]的含义是,从p所指向的内存地址开始,偏移2个T类型的大小,即获取该地址后面第二个T类型变量的值。

    具体的解决方案如下所示:

    1. 首先要确定p是一个指针变量,而不是数组。可以通过查看代码来确认p的类型。
    2. 针对p[2]表达式的含义,要先确定p所指向的类型T,再根据该类型来确定偏移的大小。
    3. 使用指针算术运算,将p的值加上2个T类型的大小来获取p[2]的值。

    下面是一个示例代码,假设p是一个指向int类型的指针变量:

    int arr[5] = {1, 2, 3, 4, 5};
    int *p = arr;  // 指针p指向arr的第一个元素
    
    int result = *(p + 2);  // 获取p[2]的值
    
    printf("%d\n", result);  // 输出3
    

    在这个示例代码中,p指向arr数组的第一个元素1,通过将p加上2个int类型的大小,就可以得到p[2]的值,即3。

    希望这个解释可以帮助你理解指针变量p[2]的含义。如果还有其他问题,请随时提问。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^