本文目錄一覽:
- 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/zh-tw/n/308323.html