若有以下说明和语句,则pl-p2的值为()。 int a [10],*p1,*p2 ;p1-a;p2=&a[5];
时间: 2024-02-12 22:04:52 浏览: 162
根据题目给出的说明和语句:
```
int a[10], *p1, *p2;
p1 = a;
p2 = &a[5];
```
可知 `p1` 指向数组 `a` 的首元素,`p2` 指向数组 `a` 的第 6 个元素。因此,表达式 `p2 - p1` 的值即为 `&a[5] - &a[0]`,即两个指针之间的元素个数。由于数组 `a` 中共有 10 个元素,因此 `p2 - p1` 的值为 5。因此,`pl-p2` 的值为 `-5`。
相关问题
#include <stdio.h> void swap( int *pl,int *p2) { int p; p=*pl; *p1=*p2; *p2=p; } void main() { int a,b; scanf(" %d%d ",&a, &b);
这段代码存在几个问题:
1. 函数 swap 的参数名应该是 p1 和 p2,而非 pl 和 p2。
2. 函数 swap 中的变量名 p 和参数名 p2 重复。
3. 函数 swap 中交换两个变量的语句有误,应该是 *p1 = *p2; *p2 = p;。
4. 函数 main 中没有调用 swap 函数。
5. scanf 函数中的格式化字符串多了一个空格,应该改为 scanf("%d%d", &a, &b);。
修正后的代码如下:
```c
#include <stdio.h>
void swap(int *p1, int *p2) {
int tmp = *p1;
*p1 = *p2;
*p2 = tmp;
}
int main() {
int a, b;
scanf("%d%d", &a, &b);
swap(&a, &b);
printf("a = %d, b = %d\n", a, b);
return 0;
}
```
输入例如:
```
1 2
```
输出结果为:
```
a = 2, b = 1
```
C语言编程:(1)从键盘输入2个字符串,计算字符串strl中字符串str2出现的次数。要求:不使用 字符事比较库函数,直接使用指针进行字符比较。 部分程序代码如下:Hincmude Kstalo.hs main() Lchar str1[811,str21201,*p1,-p2; int sum=0; printf("please input two stringstn"), scanf("%s%s",strl,str2); pl=strl; p2=str2; printf("%d",sum); 请在以上程序的“…”处添加语句来完成整个程序的编写,然后调试程序使其能按题目 要求输出正确结果。
可以使用指针循环遍历字符串,逐个字符进行比较,如果相同则继续比较下一个字符。如果比较完整个str2,发现其中的字符都与str1中的对应位置相同,则表示str2在str1中出现了一次,计数器加1。最后输出计数器的值即可。
下面是完整的程序代码:
```c
#include <stdio.h>
int main() {
char str1[81], str2[21], *p1, *p2;
int sum = 0;
printf("please input two strings:\n");
scanf("%s%s", str1, str2);
p1 = str1;
p2 = str2;
while (*p1 != '\0') { // 循环遍历str1中的每个字符
if (*p1 == *p2) { // 如果当前字符相等,则继续比较下一个字符
p1++;
p2++;
if (*p2 == '\0') { // 如果str2中的所有字符都比较完了,则表示匹配成功,计数器加1
sum++;
p2 = str2; // 重新指向str2的开头,准备下一次匹配
}
} else { // 如果当前字符不相等,则重新从str2的开头开始匹配
p1 = ++str1; // 注意这里要先自增str1的指针,再将其赋值给p1
p2 = str2;
}
}
printf("The number of times str2 appears in str1 is: %d\n", sum);
return 0;
}
```
需要注意的是,上面的程序中使用了一个技巧,即在匹配失败后,将str1的指针直接移动到下一个字符处,而不是重新从当前位置开始匹配。这样可以避免重复比较已经比较过的字符,提高效率。
阅读全文