本文目录一览:
- 1、二级指针打印二维数组的问题
- 2、C语言二级指针打印数组元素崩溃
- 3、C语言二级指针与数组结合
- 4、c语言二级指针当二维数组名的问题 为什么这样出错??????????
- 5、c语言指针与数组问题。在以下程序中为何二级指针的初始化赋值有错,求大虾相助!
二级指针打印二维数组的问题
二级指针是指向指针的指针,他不一定是指向数组的
貌似不能用二级指针来指向数组;
我改了一下你的程序,用一级指针的,结果就行了:
#include “stdio.h”
main()
{
int a[3][3]={0},*p,j; //此行改过
int i,l;
printf(“please input the numbers:\n”);
for(i=0;i3;i++)
for(l=0;l3;l++)
scanf(“%d”,a[i][l]);
for(j=0;j3;j++)
{
for(p=a;pa+3;p+=3) //此行改过
{
printf(“%4d”,*(p+j)); //此行改过
if(p==a+2)
printf(“\n”);
}
}
}
C语言二级指针打印数组元素崩溃
#include void main() { int a[3][4]={1,3,5,7,9,11,13,15,17,19,21,23}; int (*p)[4]; p=a; printf(“%d”,*(p)[3]); } 首先你没有理解int (*p)[4]; 他的意思就是含有4个指针的数组 由于int a[3][4]只有3行,所以*(p)[3]这个地方就越界了 如果*(p…
C语言二级指针与数组结合
二级指针定义和你的理解是有些差别的。
对于int a[5][5]; int * q =(int*)a;来说,
q[i*5 + j]与a[i][j]是一回事,
而int ** p = q,则变成一个地址的指针了,不知道这么说你听懂没有?
换句话说:
int a[5][5]; int * q = (int *)a; int ** p = q;这时才是真正的二级指针
使用时p[0]相当与a[0][0]的地址,如果你直接写int **p = a;这时p的值是一个地址,*p第一次取当前地址的值,也就是a[0][0],然后 **p再取一次,得到是什么呢?因为*p == a[0][0],那么**p就是以a[0][0]的值为地址,取其中的值
而a[0][0]当前值是0,**p的结果是,要求操作系统取内存中,地址为0的存储器当前的值,这个值不是没有,而是无权访问!
二级指针是个很容易误解的概念,一定要认真理解 :
int **p = a;
*p = *a = a[0] == a[0][0] = 0;
所以**p = *0//出错
c语言二级指针当二维数组名的问题 为什么这样出错??????????
因为你仅仅分配的第一维数组的大小,没有对m[0]进行分配
也就是说少了m[0] = (int *)malloc(sizeof(int))
c语言指针与数组问题。在以下程序中为何二级指针的初始化赋值有错,求大虾相助!
你的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;
}
原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/308323.html