指標變數作為引數傳入的問題

2025-02-06 02:45:20 字數 3582 閱讀 6963

1樓:n維向量

標準,是支援類似char s[sizeof(p)]的宣告的,只要支援c99標準的編譯器都可以編譯通過。但在此處,這個宣告實際所進行的操作可能和樓主預計的不一致。因為此處的p是個「指標」,指標大小一般情況下是4個位元組,所以s這個char陣列的大小永遠都是4,並不會根據「p指標指向的內容」而動態改變。

2.在函式deletestr(char* p,char ch)內部的p,不是main函式中的q,和q唯一有關係的地方是它所指向的初始內容和q一樣,本質上是q的乙個拷貝(準確來講是「指標的拷貝」),因此將p指向另外乙個內容,實際上是改變了p這個指標的指向,而不會改變q的指向。

3.最後,此程式無論如何都無法修改main中的q。因為char* q="chchccc"這樣的宣告,其實是const宣告(它分配的記憶體在常量區),理論上q指向的內容不可被修改。

2樓:網友

你應該是新手吧。

char s[sizeof(p)];這句寫的完全不對,我估計你是想定義乙個p指標指向的大小的字元陣列。

但是,sizeof(p)得到的是乙個指標的大小,也就是說永遠是4char s,方括號裡必須給乙個靜態的值,也就是常量,陣列的大小要固定!

3樓:紅山人

嗯。樓上說的對。

你是想根據實際情況來確定陣列s的大小。是吧。但是,在定義陣列時,必須給出確定的大小。否則,系統在編譯時就無法給它分配記憶體。就要報錯。

在不能確定大小時,一般都是估計出最大值,以這個值來定義陣列的。比如你可以定義這個陣列為char s[50],這並不影響實際使用。就這樣。不知你能不能明白。朋友。

「指標變數作為函式引數的作用:將乙個變數的位址傳送到另乙個函式中」這句話怎麼理解?謝謝

4樓:網友

你可以理解為指標是一條路,在函式里面可以沿著它去修改它指的內容,不然的話是不能訪問到原版變數的。

5樓:網友

通俗點講就是,你問乙個人路時,那個人把你要去的地方的位址告訴了你,而不是直接將那個地方的情況詳細的說了一遍!

6樓:網友

一般來說,乙個函式里的區域性變數只能在這個函式里被訪問到。比如在函式foo中定義了乙個區域性變數a,然後呼叫另乙個函式bar,在bar裡是訪問不到a的。但如果想在bar裡修改a該怎麼辦呢?

注意到函式的引數是函式對外的介面,相當於函式的輸入,乙個自然的想法是將a當成引數傳遞給bar。但這種情況下傳遞給bar的其實是a的乙個拷貝,是與a獨立的乙個變數,儘管二者的值相等。在bar裡修改這個拷貝的變數對a沒有任何影響。

乙個解決辦法便是通過傳遞a的位址(即指向a的指標)來代替直接傳遞a。這樣在bar裡就可以通過這個位址訪問並修改a了。

7樓:網友

函式的引數傳遞有三種方式:值傳遞,指標傳遞,引用傳遞假如定義乙個函式 func(int a)

現在有乙個整型變數int x = 8;

1、值傳遞:func(x),就是呼叫函式時將x的值傳入函式,注意!!!這時傳入的是x變數的副本,而不是x變數本身,雖然副本和本身的值一樣,但是儲存位址不一樣,所以對副本的改變不會影響本身。

指向x :int *px = x;此時呼叫func(px),因為傳入的是x的位址,所以此x就是確定的,更改指標所指位置的值,也就更改了x的值。

引用傳值和指標傳值的區別

8樓:super丶

首先要搞清楚指標和引用區別。引用只是相當於乙個變數的別名而已,並不是乙個具體的物件,在記憶體中並不會分配空間。而指標是具體乙個物件,宣告乙個物件時會在記憶體中為指標也分配空間。

當普通變數作為形參傳值時,只是將該變數的值傳給函式,在函式內部不管如何變化都不會改變改變數的值。但是當引用傳值時,在函式內部如果對形參做改變的話就會對該變數做改變,此時的形參相當於該變數的乙個別名,對這個別名做出的改變就相當於對該變數做出改變。當指標作為形參向函式傳值的時候是傳的改變數的位址,所以在函式內部對該位址的內容做出改變就相當於對該變數的改變。

不知這樣解釋樓主明白不,不明白可以接著追問,望樓主。

用指標變數作為函式引數

9樓:由彤巫曼青

指標其實就是位址,例如。

inta=3;

intp=&a;

這時p就是乙個指標,它的值胡枝就是a在記憶體中位址,&是取位址的意思,在函式呼叫中用了指標作形參,那麼呼叫函式時候實參傳遞給函式的是引數的位址,函式在執行的過程中會根褲扮敏據這個傳過來的位址去對那個變數進行運算。最後會把這個變數的值改變。

用引用也是用位址實現這種傳遞法。

不用指標變數,則函式在呼叫時會在記憶體另外乙個地方再開啟記憶體,傳遞過來的值交給了這個新開啟的記憶體。函式在執行過程中則只對這部分新開啟的記憶體變數操作,結束後不會返回值,所以,指標變數其實就是通過位址來改缺悉變主函式中變數值。

關於指標變數的問題

10樓:網友

定義乙個指向函式的指標變數p。

這個指標變數指向的函式型別為:

1、返回值為int型別;

2、它的引數為兩個int型別的變數;

這樣定義的意義是:

我舉個例子吧,有以下的函式定義:

int max(int a,int b)

那麼,max代表的就是這個函式的位址(儲存在棧空間中),語句p=max;就是將max函式所在的位址值賦值給p,那麼以後呼叫max函式就可以這樣:

p)(a,b);//這個沒什麼好解釋的,格式而已就是這樣。

11樓:網友

我推薦你去看譚浩強的c語言基礎。。。因為這個問題太基礎了。int a,int b都是形參。這個p是個指標,而且是函式指標。再不知道給你怎麼講了。

12樓:滑民航

int(*p)(int a , int b) 是定義乙個指標函式 其中int a int b 是引數 本身他們沒什麼直接關係的。

完整的形式是。

int (*p)(int a,int b)如果只是 int (*p)(int a,int b); 這個後面有個逗號的 表示宣告 只是宣告 沒定義的。

13樓:網友

int (*p) (int a, int b); 表示指向函式的指標, (int a, int b) 是函式的形參,變數 a、b 只不過是 函式的形參名字,是為了方便閱讀所用, 跟 p 沒有關係,可以省略。

int (*p) (int a, int b); 等價於 int (*p) (int , int );

14樓:網友

(int a, int b) 是兩個形參(形式引數)返回乙個整形指標函式。

其實我也不知道它有什麼意義。正在學習中,學完再告訴你!

它們之間沒有什麼關係,只是宣告而已。

關於指標變數的問題

15樓:網友

2.你可以把a怎麼是指向行的?,a是乙個一維陣列,不是二維陣列。

你可以理解為a是指向陣列的首位址就可以了,a就指向陣列的第乙個元素a[0],a+1就指向陣列的第二個元素a[1],a+2指向陣列的第三個元素a[2]。

C 裡指標變數自身值的問題,關於c 中指標變數的問題

pt 1244996 是pt的地址 p 後 p p 優先順序高,因此 地址變為了 1245000 注意整形指標 1,其實就是 4,因為整形的size是4位元組 p 1245064 是地址1245000 對應的記憶體值,是不確定的 p 1244992 是p這個指標本身在記憶體中存放的位置,這個也是不確...

c語言中變數指標輸出問題,C語言中變數指標輸出問題

這和printf用 s的規則相關。首先ps是一個指向字元型資料的指標 printf用 s修飾輸出時需要提供一個指標,這個指標指向的資料是字元型的,但printf將按照字串的規則來進行輸出,也就是輸出完這個指標指向的字元後,自動將指標加1,並判斷指向的字元是否為0,否則將輸出直至指向的資料為0為止,或...

C 中將指標函式引數修改為引用作為引數有什麼好處

一般來說,這樣做抄是為襲了防止在函式中亂用引數 因為如裡你用int a,這樣在函式中就只能用a,也知道a是個整型變數 而如果你用int a,那麼在函式中只知道a是個整型指標,至於它指的是個數還是一個向量,這個不清楚,如果不小心用了a 1 這些的話,明顯就越界了 因此,在寫程式中,如果可能的話,推薦在...