講解指向指標的指標傳值原理。
#include <stdio.h> #include <stdlib.h> #define n 7 /* 用指向指標的指標的方法對n個整數排序並且輸出。 要求將排序單獨寫成一個函式,n個整數在主函式中輸入,最後在主函式中輸出 */ int main(int argc, char *argv[]) { int **p,*str[n],arr[n]; //定義的是整型變數,而不是字元型變數 int i; //定 義 循 環 變 量 i for(i=0;i<n;++i) { str[i]=&arr[i]; //將陣列進行逐個的賦值,arr[i]的行的首地址存放在str[i]中。 } //輸入 printf("input"); for(i=0;i<n;i++) { scanf("%d",str[i]); } // 呼叫sort函式進行排序 sort(str); for(i=0;i<n;++i) { printf("%d ",*str[i]); //逐個進行輸出 } return 0; } void sort(int **p) //採用的是冒泡的方法進行的排序 { int i,j; int temp; for(i=1;i<n;++i) { for(j=0;j<n-i;++j) { if(**(p+j+1)<**(p+j)) { temp=**(p+j+1); **(p+j+1)=**(p+j); **(p+j)=temp; } } } return 0; }
畫圖的方式說明原理:NO.1
第二種方法傳地址:
void sort(int **p) //採用的是冒泡的方法進行的排序
{
int i,j;
int *temp;
for(i=1;i<n;++i)
{
for(j=0;j<n-i;++j)
{
if(**(p+j+1)<**(p+j))
{
temp=*(p+j+1);
*(p+j+1)=*(p+j);
*(p+j)=temp;
}
}
}
return 0;
}
畫圖的方式說明原理:NO.2
執行結果:
#include <stdio.h> #include <stdlib.h> #include <string.h> #define n 5 /* 指向指標的指標的方法n個字串排序並輸出*/ int main(int argc, char *argv[]) { void sort(char **p); char **p,*str[n],arr[n][20]; int i; for(i=0;i<n;i++) { str[i]=arr[i]; } // input printf("input:\n"); for(i=0;i<n;i++) { scanf("%s",str[i]); } // call the function p=str; sort(p); //output printf("output:\n"); for(i=0;i<n;++i) { printf("%s\n",str[i]);//呼叫 此處仍然是行的首地址,為指標,注意了! } return 0; } void sort(char **p) //採用的是氣泡排序,地址的交換 { int i; int j; char s[20];//為什麼要交換地址,因為是字串,字串並不能用以下的方法來交換 for(i=1;i<n;++i) { for(j=0;j<n-i;++j) { if(strcmp(p[j],p[j+1])>0) // 記得字串比較函式,1、實參是輸入的地址如char *a,*b;2、 strcmp(a,b); { strcpy(s,p[j]); strcpy(p[j],p[j+1]); strcpy(p[j+1],s);// 記得交換字串 } } } }
/*關於sort()部分,下面為兩種方法進行交換字串 NO2. void sort(char **p) //採用strcpy一定要保證是 { int i; int j; char *temp,s[10]; temp=s;// 為什麼要交換地址,因為是字串,字串並不能用以下的方法來交換 for(i=1;i<n;++i) { for(j=0;j<n-i;++j) { if(strcmp(p[j],p[j+1])>0) // 記得字串比較函式,1、實參是輸入的地址如char *a,*b;2、 strcmp(a,b); { strcpy(temp,p[j]); strcpy(p[j],p[j+1]); strcpy(p[j+1],temp);// 記得交換字串 } } } } */
對NO.2 的方法進行圖示講解:
/*
NO3.
字串交換的方法如下: 採用的是交換地址的方法
for(i=0;i<n;++i)
{
for(j=0;j<n-i;++j)
{
if(strcmp(*(p+i),*(p+j))>0) // 記得字串比較函式,1、實參是輸入的地址如char *a,*b;2、 strcmp(a,b);
{
temp=*(p+i);
*(p+i)=*(p+j);
*(p+j)=temp;// 記得交換字串
}
}
*/
相關推薦
講解指向指標的指標傳值原理。
#include <stdio.h> #include <stdlib.h> #define n 7 /* 用指向指標的指標的方法對n個整數排序並且輸出。 要求將排序單獨寫成一個函式,n個整數在主函式中輸入,最後在主函式中輸出 */ int main
C++傳遞引用與傳指標、傳值的區別
引用就是某一變數(目標)的一個別名,對引用的操作與對變數直接操作完全一樣。引用的宣告方法:型別識別符號 &引用名=目標變數名; 引用最大的好處就是提高函式效率以及節省空間; 關鍵問題一、傳遞引用與傳指標、傳值的區別? 值
引用&指標、傳值&傳引用&傳址的區別
引用 概念(貼標籤式) 引用不是新定義一個變數,而是給已存在變數取了一個別名,編譯器不會為引用變數開闢記憶體空間,它和它引用的變數共用同一塊記憶體空間 型別& 引用變數名
struts2 ognl的傳值原理
OGNL 1.1 OGNL的全稱是Object Graph Navigation Language(物件圖導航語言),它是一種強大的表示式語言 1.2 OgnlContext(ongl上下文)其實就是Map (教室、老師、學生) OgnlContext=根物件(1)+非根物件(N)
thinkphp+layui,在父頁面對彈窗中的控制元件進行賦值操作(傳值)。
問題描述:點選評論回覆按鈕->彈出表單輸入框->對所點選的按鈕進行回覆評論->提交回復。這裡遇到的問題就是怎麼通過layer建立一個彈窗並把這個需要操作的id值傳到iframe彈出層。解決:點選當前條需要回復的評論並獲取到這個評論的id值,在點選回覆按鈕是用
WPF通過委託跨頁面修改介面控制元件,並傳值原理完全解析
網上有很多講WPF修改控制元件的,但是大部分都只是程式碼佔據了很大的篇幅,沒有詳細講解過程。所以有了我這篇文章。我希望每一個看到這篇文章的朋友都可以看懂,另外不要被太長的標題嚇到。 通過委託跨頁面修改控制元件,所謂的原理就是,構造一個可以觸發事件A的靜態類,然後對頁面做出
提交Form表單,POST和GET方式的傳值問題。
<form action="${pageContext.request.contextPath }/UserServlet?id=123" method="get"> userame:<input type="text" name="username"&
從彙編和高階語言的角度理解傳值方式,傳值,傳引用,傳指標的本質機制與區別。白話通俗易懂。
函式的傳參與返回值的方式有傳值和傳遞引用,c語言中就是傳值,而c++擴充套件傳引用。 而傳值分為傳遞值(實參的值,此時形參是實參在記憶體中的一份拷貝,形參在使用時分配記憶體,結束時釋放,實參和形參在記憶體中的地址不同,因此對形參的改變不會改變實參) 傳值的另外一種是傳指標
C++傳引用和傳值,傳指標
我們需要傳資料而不改變資料儲存,直接傳值,如int a; 我們需要傳資料,並且改變值大小,需要傳地址,如 int * pa; 我們需要傳資料,並改變數結構中指標的指向,需要傳二級指標,如連結串列中的 node * * l; ... 以前是passl-by-val
C++的函式的傳值呼叫、指標呼叫、引用呼叫的聯絡區別
當呼叫函式時,有兩種向函式傳遞引數的方式: 呼叫型別 描述 傳值呼叫 該方法把引數的實際值複製給函式的形式引數。在這種情況下,修改函式內的形式引數對實際引數沒有影響。 指標呼叫 該方法把引數的地址複製給形式引數。在函式內,該地址用於訪問呼叫中要用到
C++primer第五版 編寫一個函式,令其接收兩個引數,一個是int型的數,另一個是int指標。函式比較int的值和指標所指的值,返回較大的那個。
該題目主要是為了熟悉函式引數的幾種傳遞方式。定義函式形參時,可以定義成傳值(本身)、傳指標(*)、傳引用(&)。如果只是訪問引數值,不對其進行修改,那麼這三種方式都是可以的。例如該題目,就僅僅是比較兩個引數的大小,並沒有對引數本身進行修改,因此傳值和傳指標都是可行的。
C/C++二維陣列(陣列指標)——二維陣列的傳值和二維陣列的一維訪問
二維陣列既可以通過二維訪問也可以通過一維訪問。 對於二維陣列的傳值,引進了陣列指標。 #include <stdio.h> void foo(int *p,int n)//一維訪問 {
SSH使用modelDriven傳值出現空指標異常 java.lang.NullPointerException
java.lang.NullPointerException 有可能是application.xml檔案裡面忘了配置bean的屬性,導致物件沒傳進action、、或者是application.xml裡面的“id”與action裡使用的set方法變數名不同【no
真正搞懂傳值引用和傳指標引用
通過一個基本原則和兩個例子講述傳值引用和傳指標引用的區別,並且從系統底層解析這兩種呼叫的區別 acmore 2017.11.14 1. 問題概述 在C語言呼叫函式時,有兩種傳引數的方法,一種是傳值,另一種是傳引數。對於C語言的初學者(甚至是
C++拷貝建構函式_形參為什麼只能是引用(不能傳值或指標)
先給出答案: 拷貝建構函式不能用數值或指標形參原因,不是為了節省建立副本的空間與時間。而是那樣做會無限迴圈遞迴下去。 舉個例子來看一下為什麼會這樣。(反例) class Example() { public: Example(int a):aa(a) {}
傳值、傳指標、傳引用
值傳遞、指標傳遞、引用傳遞的區別 c語言的規則很簡單:“所有的引數都是傳值呼叫”。在這句話的基礎上,我們來分析值傳遞、指標傳遞、引用傳遞的區別。 一、值傳遞 值傳遞,這與C函式的性質有關。C函式的所有引數均以“傳值呼叫”方式進行傳遞,這意味著函式值將獲得引
傳值,傳指標和傳引用區別和聯絡
C++寫了很多年,有一天,寫著寫著程式碼。竟然自己發現對傳值,傳指標,傳引用這個每天都在用的傳遞方式的區別還不是很清楚。以為自己懂了,其實還理解得還不夠深入,基礎還需要花時間琢磨。今天參考了很多篇部落格和書籍做些總結。 其實,不用分為三類,只有兩類即可。傳值和
指標變數作為函式引數為了改變指標變數指向實參的值
C語言使用值傳遞時,僅僅將實參的值傳遞給形參。 對於第一種寫法 main函式傳遞給Swap函式的是&a和&b的值,即a和b所在的地址的值 那麼Swap函式裡面通過*x來更改的就是&a所在的地址裡面的值,也就是a本身的值了,所以第一種寫法main函式呼叫Swap函式之後,a和b的值會
函式指標、函式返回指標、const指標、指向const指標,指向const的const指標。
①函式指標 函式指標是指向函式的指標變數。 因而“函式指標”本身首先應是指標變數,只不過該指標變數指向函式。這正如用指標變數可指向整型變數、字元型、陣列一樣,這裡是指向函式。如前所述,C在編譯時,每一個函式都有一個入口地址,該入口地址就是函式指標所指向的地址。有了指向函式的
Spinner中getResource()空指標問題以及Context傳值問題
在封裝一個Spinner的時候,傳值報空指標異常: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.res.Resources android.content