s 表示数组首地址,s是不能被修改的,所以B错误
s[2] = p[4],相当于用s数组中 索引为4的元素,替换索引为2的元素
char s[20]="Beijing", *p;
p = s;
选项 | Value |
---|---|
A | 可以用*p表示s[0] |
B | s数组中元素的个数和p所指字符串长度相等 |
C | s和p都是指针变量 |
D | 数组s中的内容和指针变量p中的内容相同 |
答案为:A
B:s数组元素的个数为7,而p所指字符串长度为20;
C:s是一维数组,p是指针变量
D:应改为数组s中的内容和指针变量p所指数组的内容相同,因为单单说指针p的内容只为16进制的地址
————————————————————————————————————————————————————
以下为多选题(紧张又刺激)
问题回答:
在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中的题目涉及到的循环双向链表的插入操作,正确的次序是④③①②。解释如下:
最后,段落2中的代码可以实现对一个字符串数组进行快速排序,具体实现方式是定义一个指针数组 pStr,将其内容对应指向字符串数组 a,并通过 strcmp 函数来比较字符串的大小关系,写出了按照字典序从小到大排序的代码。