问题:C语言中的指针相关问题

img


没看懂上面的题,选项都是啥意思啊?p是第一个元素s[0]的地址,那C选项的s[2]=p[4]是啥意思?求详细解答,谢谢大家

s 表示数组首地址,s是不能被修改的,所以B错误
s[2] = p[4],相当于用s数组中 索引为4的元素,替换索引为2的元素

  • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/7622884
  • 除此之外, 这篇博客: 万字长文带你玩转2020全国大学生计算机技能应用大赛—C语言模考整理解析中的 13.设有如下程序段,则执行p=s;语句后,以下叙述正确的是( )。 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • char s[20]="Beijing", *p;
    p = s;
    
    选项Value
    A可以用*p表示s[0]
    Bs数组中元素的个数和p所指字符串长度相等
    Cs和p都是指针变量
    D数组s中的内容和指针变量p中的内容相同

    答案为:A

    B:s数组元素的个数为7,而p所指字符串长度为20;
    C:s是一维数组,p是指针变量
    D:应改为数组s中的内容和指针变量p所指数组的内容相同,因为单单说指针p的内容只为16进制的地址

    ————————————————————————————————————————————————————

    以下为多选题(紧张又刺激)

  • 以下回答由chatgpt基于相关博客总结生成:

    问题回答:

    在C语言中,指针是一个变量,其值为内存中另一个位置的地址,主要用于操作数组、字符串、函数等。其中,数组名可以被视为一个指针,即数组名所代表的地址就是数组首元素的地址。

    对于“p是第一个元素s[0]的地址”的问题,如下代码所示:

    int s[10];
    int *p=s;       // p指向s数组首元素的地址
    

    其中,p是一个指针,指向了数组s的首元素,即s[0]。如果直接输出p的值,就是s[0]的地址。

    对于“s[2]=p[4]”这个问题,需要明确p[4]是什么。p[4]表示p指针向后移动4个元素之后所指向的元素,实际上就是s[4]的地址。因此,s[2]要等于p[4],就相当于让s[2]指向s[4]元素所在的地址。代码如下:

    int s[10];
    int *p=s;
    s[2] = *(p + 4);        // 或者 s[2] = p[4];
    

    另外,段落0中的题目涉及到的循环双向链表的插入操作,正确的次序是④③①②。解释如下:

    • 首先执行插入操作需要先将新节点 s 的前驱指针和后继指针确定好,因此需要先执行步骤 ④③,让新节点 s 的前驱指针指向 p 的前驱节点,后继指针指向 p;
    • 确定好 s 的前驱和后继指针之后,就可以执行插入操作,让 s 插入到 p 和 p 的前驱节点之间。因此需要依次执行步骤 ①和②即可。

    最后,段落2中的代码可以实现对一个字符串数组进行快速排序,具体实现方式是定义一个指针数组 pStr,将其内容对应指向字符串数组 a,并通过 strcmp 函数来比较字符串的大小关系,写出了按照字典序从小到大排序的代码。