本文目錄一覽:
- 1、關於C語言中的二級指針
- 2、C語言中的結構體二級指針問題
- 3、c語言二級指針問題
- 4、c語言關於二級指針
- 5、c語言 二級指針
- 6、關於c語言二級指針的問題
關於C語言中的二級指針
二級指針就是指針的指針,也就是指向一塊內存的地址的地址。例子如下
int i = 23;
int *pi = i;
int **ppi = π
cout i ‘ ‘ *pi ‘ ‘ **ppi endl;
數組就是存放多個變數的一塊內存。該內存塊的大小取決於該數組中變數的類型和個數,
C語言中的結構體二級指針問題
// PTREE 可以理解為是 struct TreeNode * 的別名,
// PTREE 類型的變數,即是指向 struct TreeNode 結構體變數的指針,
// 那麼,PTREE * 類型的變數,就是指向 struct TreeNode 結構體變數指針的指針,
// 要理解為什麼參數中傳遞的是指向 PTREE 類型的指針,首先要了解 C 語言參數傳遞的機制
// C 語言中,形參只是實參值的一份拷貝,它們僅僅是值相等,除此外再無其他關聯,
// 重要的是,它們的地址不同,也就是說,改變了形參,實參並不受其影響。
// 而為了影響到實參,就需要知道實參的地址,通過其地址來修改實參。
// 通過把實參的地址傳給形參,就可以修改與其相關聯的實參的內容。
// C 語言的傳參是基於傳值的,理解了這個,由這類問題造成的困惑都會迎刃而解啦。
// 遇到指針問題,可以通過畫圖來幫助分析問題
// 要了解更多關於 C 語言傳參機制的更多內容,可以再百度一下。
// 希望可以幫到你
c語言二級指針問題
7——k的值
5——s=t,s是t的地址,即s指向的內容是t(一個指向整型變數的指針);
*s=m,s指向的內容是m的地址,又因為s指向的內容是t,所以t的值改變成為m的地址,即t 指向的內容為m(一個整型變數),因此*t(t指向的內容)的值為5
5——**s=*(*s)=*t
3——i的值
3——int *p=i 等價於 int *p;(定義一個整形指針p)p=i;(p的值為i的地址),所以*p的值為3
3——int **r(定義一個指針r,r指向的內容是一個整形指針),r=p(r的值為p的地址,即r指向的 內容是一個整形指針p,其中p的值是i的地址)**r=*(*r)=*p
說的不太清楚請見諒,我指針也是屬於一知半解,不過因為指針直接訪問內存,所以請一定理解好它,否則以後編寫C語言的程序很容易造成編譯器檢查不出的錯誤導致大範圍的人工查錯。
c語言關於二級指針
實參看情況比如
1 .char array[10][10];
則可以將array 傳入。
2 當然也可以 char **array;然後自己申請內存。
接著將array傳入。
3 或者char *array;
將array傳入。
當然要看你是什麼用法。
從你的函數來看你估計是要傳一個二維數組首地址,也就是第一個。
c語言 二級指針
第一條改成
int
a[10][20],*p=a[0];
二維數組本來就是以為數組,二級指針是指針的指針,不同概念
char
*a[]={“a”,”b”};
char
**p=a;
這裡定義了一個指針數組,裡面保存了兩個地址,一個是字元串a的首地址,一個是字元串b的首地址,然後數組的首地址a,這樣用一個二級指針才能訪問,這就是所謂的指針的指針
int
a[2][2]={1,2,3,4};
int
(*p)[2]=a;
(*p)[2]的意思是,p是一個指針變數,只想一個有兩個元素的一位數組,這不剛剛就是二維數組的首地址嗎?所以這個(*p)[2]是可以指向二維數組首地址
*p[2]的意思是,定義一個數組,裡面有兩個指針元素,這和”[]”,”*”運算符優先順序有關的
關於c語言二級指針的問題
#include stdio.h
int main(int argc, char *argv[])
{
char *strings[]={“123″,”456″,”789”};
char **p;
p = strings;
printf(“[%c] [%s]\n”, **p, *p);
return 0;
}
列印信息是[1] [123]
很正常嘛,完全正確啊,沒啥異常。
我知道了,你可能有誤解,**p不是指向string[0],而是指向string[0][0], *p才是指向string[0]
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/195279.html