c语言指针与数组问题。在以下程序中为何二级指针的初始化赋值有错,求大虾相助!
#include<stdio.h>intmain(){inta[][3]={{1,2,3},{4,5,6},{7,8,9}};int**p=&a;while(*p){wh...
#include <stdio.h>
int main() {
int a[][3] = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
int **p = &a;
while (*p) {
while (**p) {
if (*((*p)+1) == 2) {
printf("ok");
return 0;
} else {
printf("not ok");
return 0;
}
}
p++;
}
return 0;
} 展开
int main() {
int a[][3] = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
int **p = &a;
while (*p) {
while (**p) {
if (*((*p)+1) == 2) {
printf("ok");
return 0;
} else {
printf("not ok");
return 0;
}
}
p++;
}
return 0;
} 展开
4个回答
展开全部
你的p声明和赋值的时候有问题,因为a本身就是地址,所以不要&a,而a本身是指向3维数组的数组,那么不能用任意类型的指针的指针来获取,应该用指向三维数组的指针
#include <stdio.h>
int main() {
int a[][3] = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
int (*p)[3] = a;
while (*p) {
while (**p) {
if (*((*p)+1) == 2) {
printf("ok");
return 0;
} else {
printf("not ok");
return 0;
}
}
p++;
}
return 0;
}
#include <stdio.h>
int main() {
int a[][3] = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
int (*p)[3] = a;
while (*p) {
while (**p) {
if (*((*p)+1) == 2) {
printf("ok");
return 0;
} else {
printf("not ok");
return 0;
}
}
p++;
}
return 0;
}
追问
a我们可以当做是一个地址而&a之后意思是将数组a的地址取出赋值给二级指针p不是吗
二级指针的意思就是指针的指针 也就是一个地址的地址。这个怎么解释?
追答
你要是这样理解的话,你的p就只能是一个void*类型的指针了,然后你自己控制指针的位移;而且我要提醒你:“二级指针的意思就是指针的指针 也就是一个地址的地址”——归根结题是一个地址,你用一个int**来指向编译器会傻掉的。。
展开全部
int **p = &a;
改成
int (*p)[3] = a;
就可以了
首先解决下你的疑惑。
a[][] 是二维数组,a[0][0]是 int 类型的,而a[0]是 int* 类型的,因此a是一个地址,不需要再加个取地址&,正如一位数组int b[3]; int* p = b; 这样赋值只正确的。二维数组的话,你也可以看成是一个一位数组将其中的a[0]看成A,注意这是个地址,则a[0][0]看成A[0],注意这是个值
int (*p)[3] 是一个指向数组的指针,将a赋值给p,p指向的数组就是a[0],也就是A,A里面有3个元素A[0], A[1], A[2],因此这样赋值是正确的
再说,*p就是A,是个地址,**p就是A[0],是一个值
*((*p)+1) ,先将*p理解成A的话,(*p)+1,就是A+1,也就是A[1],然后*((*p)+1) 再取A[1]的值,因此就是a[1][0]的值,其他的都可以用这个方法类推
改成
int (*p)[3] = a;
就可以了
首先解决下你的疑惑。
a[][] 是二维数组,a[0][0]是 int 类型的,而a[0]是 int* 类型的,因此a是一个地址,不需要再加个取地址&,正如一位数组int b[3]; int* p = b; 这样赋值只正确的。二维数组的话,你也可以看成是一个一位数组将其中的a[0]看成A,注意这是个地址,则a[0][0]看成A[0],注意这是个值
int (*p)[3] 是一个指向数组的指针,将a赋值给p,p指向的数组就是a[0],也就是A,A里面有3个元素A[0], A[1], A[2],因此这样赋值是正确的
再说,*p就是A,是个地址,**p就是A[0],是一个值
*((*p)+1) ,先将*p理解成A的话,(*p)+1,就是A+1,也就是A[1],然后*((*p)+1) 再取A[1]的值,因此就是a[1][0]的值,其他的都可以用这个方法类推
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
a已经是二级指针了,不用取地址,直接p=a
更多追问追答
追问
有试过 不行 呵呵
追答
是赋值不能,直接报错,还是运行结果不对呢
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询