*(pt+1)[2]哪里错了
时间: 2023-10-29 19:04:24 浏览: 264
表达式*(pt+1)[2]是有问题的,因为[]的优先级比*高,所以先计算了pt+1[2],而不是*(pt+1)[2]。pt+1[2]是将pt+1解释成一个数组名,然后取该数组的第三个元素,也就是pt[3]的地址。接着,使用*运算符对该地址进行取值,但由于pt[3]指向的内存空间不属于a数组,因此该表达式会访问到非法的内存地址,导致程序出错。
如果想要得到a数组中pt指针所指向的第二行第三个元素的值,可以使用以下两种方式之一:
```
*(*(pt+1)+2)
```
或者是
```
pt[1][2]
```
这两种方式都可以正确地访问到a数组中的元素,得到正确的值。
相关问题
#1.#include <stdio.h> #2.void main() #3.{ #4. int d,c,t; #5. char str; #6. void fun(char s[],int *p1,int *p2,int *p3); #7. printf("input a string:"); #8. gets(str); #9. fun(str[80],&d,&c,&t); #10. printf("str=%s digit=%d char=%d other=%d\n",str,d,c,t); #11.} #12.void fun(char ch[ ], int *pd, *pc, *pt) #13.{ #14. int k; #15. pd=pc=pt=0; #16. for (k=0;ch[k]!='\0';k++) #17. { #18. if ((ch[k]>='A'&&ch[k]<='Z')&&(ch[k]>='a'&&ch[k]<='z')) (*pc)++; #19. else if (ch[k]>='0'&&ch[k]<='9') (*pd)++; #20. else (*pt)++; #21. } #22.}这个代码哪里错了?怎么改
这个代码有两个问题:
1. 第8行输入字符串时,应该使用`gets()`函数,而不是`gets(str)`,因为`str`只是一个字符变量,不是一个字符数组。
2. 第16行,指针变量`pd`、`pc`和`pt`在初始化时应该指向对应的变量地址,而不是赋值为0。
修改后的代码如下:
```
#include <stdio.h>
void fun(char ch[], int *pd, int *pc, int *pt);
int main()
{
int d,c,t;
char str[80];
printf("input a string:");
gets(str);
fun(str, &d, &c, &t);
printf("str=%s digit=%d char=%d other=%d\n", str, d, c, t);
return 0;
}
void fun(char ch[], int *pd, int *pc, int *pt)
{
int k;
*pd = *pc = *pt = 0;
for (k = 0; ch[k] != '\0'; k++)
{
if ((ch[k] >= 'A' && ch[k] <= 'Z') || (ch[k] >= 'a' && ch[k] <= 'z'))
(*pc)++;
else if (ch[k] >= '0' && ch[k] <= '9')
(*pd)++;
else
(*pt)++;
}
}
```
void swap1(int x,int y); { int t;t=x;x=y;y=t; } /*swap2的形参为指针变量px,py,函数的功能为交换指针所指向的变量*/ void swap3(int *px,int *py) { int t;t=*px;*px=*py;*py=t; } /*swap3的形参为指针变量px,py,函数的功能为交换指针所指向的变量*/ void swap3(int *px,int *py) {int *pt;pt=px;px=py;py=pt; } int main() { int a=1,b=2; int *pa=&a,*pb=&b; swap(a,b);//使用变量a,b调用函数swap1() printf("After calling swap1:a=%d b=%d\n",a,b); a=1;b=2; swap2(pa,pb);//用指针pa,pb调用函数swap2() printf("After calling swap2:a=%d b=%d\n",a,b); a=1;b=2; swap3(pa,pb);//使用指针pa,pb调用swap3() printf("After calling swap3:a=%d b=%d\n",a,b); return 0; }哪里错了
在代码中存在一个错误,即函数swap1的定义有误,多了一个分号,应该改为:
```c++
void swap1(int x, int y) {
int t;
t = x;
x = y;
y = t;
}
```
此外,函数swap3的实现不正确,因为交换指针本身的值并不会改变指针所指向的变量。应该改为:
```c++
void swap3(int* px, int* py) {
int t;
t = *px;
*px = *py;
*py = t;
}
```
这样,调用swap3后,指针所指向的变量的值才会被交换。
阅读全文