Ⅰ c語言中的結構體二級指針問題
//PTREE可以理解為是structTreeNode*的別名,
//PTREE類型的變數,即是指向structTreeNode結構體變數的指針,
//那麼,PTREE*類型的變數,就是指向structTreeNode結構體變數指針的指針,
//要理解為什麼參數中傳遞的是指向PTREE類型的指針,首先要了解C語言參數傳遞的機制
//C語言中,形參只是實參值的一份拷貝,它們僅僅是值相等,除此外再無其他關聯,
//重要的是,它們的地址不同,也就是說,改變了形參,實參並不受其影響。
//而為了影響到實參,就需要知道實參的地址,通過其地址來修改實參。
//通過把實參的地址傳給形參,就可以修改與其相關聯的實參的內容。
//C語言的傳參是基於傳值的,理解了這個,由這類問題造成的困惑都會迎刃而解啦。
//遇到指針問題,可以通過畫圖來幫助分析問題
//要了解更多關於C語言傳參機制的更多內容,可以再網路一下。
//希望可以幫到你
Ⅱ c語言二級指針的基本使用方法
#include<stdio.h> void main()
{
int x,y,sum;
int *i_x,*i_y;//聲明指針變數
printf("請輸入兩個數整數:");
scanf("%d%d",&x,&y);
i_x=&x;//指導變數x的地址給指針變數
i_y=&y;
sum = *i_x + *i_y;//*i_x表示i指針變數i_x的地址所指向的數值
printf("%d = %d +%d",sum,*i_x,*i_y);
}//簡單的指針變數
Ⅲ C語言中的二級指針到底是啥東東啊
要理解二級指針,首先要理解指針變數,指針對於windows系統來說,就是某個虛擬內存地址的編號,這個虛擬內存的編號對應著程序需要的數據。
二級指針,簡單來說就是指向指針變數的指針,二級指針對應的數據就是一個一級指針變數的地址值(編號)。
關於指針的理解,建議看看80X86匯編的定址。
Ⅳ c語言問題,二級指針的指向是怎樣的,以及後面那個p++的含義,多謝了
先看*p[5],它定義了一個指針數組,一個含有5個元素的一維數組,不過元素的值p[0]、p[1]、……都是指針。
再看**pp=p,pp是一個二級指針,它是指向指針的指針(本例中它指向p),其值為p的地址。*pp則是p的值,即p[0]的地址。**pp則是p[0]的元素值。
當執行**p++時,依次得到p[0]、p[1]、……的元素值。
Ⅳ c語言關於二級指針
實參看情況比如
1 .char array[10][10];
則可以將array 傳入。
2 當然也可以 char **array;然後自己申請內存。
接著將array傳入。
3 或者char *array;
將&array傳入。
當然要看你是什麼用法。
從你的函數來看你估計是要傳一個二維數組首地址,也就是第一個。
Ⅵ C語言如何用二級指針給N個整數排序
通過二級指針去訪問二維數組需要先給二級指針分配等同於二維數組行數的一維數組指針,然後把二維數組的每行首地址賦值給對應位置的一維指針上。之後就可以通過二維指針直接訪問了。
參考代碼如下,可以看具體注釋輔助理解。#include <stdio.h>//輸入輸出頭文件。#include <stdlib.h>//本程序需要用到malloc/free函數,引用該頭文件。int main(){ int a[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12}; //定義二維數組a,並賦值從1-12. int ** p = NULL;//定義二維指針。 int i, j; p = (int **)malloc(sizeof(int *) *3);//要訪問的數組有三行,所以申請三個一維指針變數。 for(i = 0; i < 3; i ++) { p[i] = a[i];//將二維數組行地址賦值到對應的一維指針上。 } for(i = 0; i < 3; i ++) { for(j = 0; j < 4; j ++) printf("%d ", p[i][j]); //用指針輸出元素。p[i][j]這里也可以寫作*(*(p+i) + j)。 printf("\n"); //每行輸出後加一個換行 } free(p);//釋放申請的內存。 return 0;}
用二維指針訪問二維數組多用於函數調用。
對於一維數組,如果函數參數為一維指針可以直接用數組名當做函數參數。但是如果函數參數為二維指針,直接用二維數組名做參數會出現訪問出錯,是因為二維指針和二維數組的訪問方式不同造成的,需要如示例代碼中做轉換。
另外一種常用的方法是利用二維數組的內存連續性將二維數組轉為一維數組處理,與本題無關,不做更多描述。
Ⅶ C語言 傳遞二級指針
void ChangeStrPo(char **p)改為 char** ChangeStrPo(),然後main里,ps=ChangeStrPo();
說明,你原來的changestrpo,p是ps的副本,malloc後,p改變了值,但是ps並沒有改變。當傳遞指針的時候,可以通過*ps來改變指針所值的地址內存放的值,但是是改變不了實參ps本身的值。
Ⅷ 請教C語言二級指針「(void **)&」的問題
(1)循環列印 pBuf[i]就可以按位元組取字元,i從0開始直到pBuf[i] == '\0' 為止。
(2)你列的例子中,(void **)&pBuf只在 i = (int)recvnc(s, (void **)&pBuf, 0, &hBuffer); 這一句裡面有意義,在printf裡面加(void **)是多此一舉毫無意義,你直接printf("%s\n",pBuf);就能列印字元串了。在recvnc函數形參禮用(void **)強制轉換是因為函數聲明要求形參必須是void **,在printf裡面還用(void **)是錯的。
(3)pBuf是char *,pBuf[0]就是char,*pBuf[0]的用法相當於把pBuf[0]這個char當作指針來用,當然是錯的。
Ⅸ c語言中二級指針怎麼轉換的
int (*q)[3]定義q為一個指針,指向一個有3個int型值的數組。
int (*)[3]就相當於一個類型,這個類型與q相同,比如說int i, i的類型為int。
那int (*q)[3],q的類型為int (*q)[3]。
類型為int (*)[3],第一句話說明了其類型的含義。
(int (*)[3])p,不就相當於(int)b,就是把p的類型強制轉換為int (*)[3]。
q結果就是一個指針,指向一個有3個int型值的數組,這個數組就是p指向的數組,即數組a。
Ⅹ c語言中如何通過二級指針來操作二維數組
1、首先我們打開電腦里的C語言軟體,新建一個工程和.c文件,輸入頭文件和主函數。