當前位置:首頁 » 編程語言 » c語言指針函數不用括弧
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言指針函數不用括弧

發布時間: 2022-07-29 11:14:08

『壹』 為什麼c語言用指針輸出字元串不用加*號

為什麼c語言用指針輸出字元串不用加*號?因為char*STR定義了一個char*字元指針STR,而STR指向了ILOVECHINA中的第一個字元I。
在cout流中有一個復制循環,它是一個具有數百個輸出STR點的字元串,在這個字元串中,STR被賦值給臨時指針,以便一個接一個地輸出。
然後*STR是一個字元,也就是I*是一個derecration,也就是STR指向的那個字元,所以*STR就是I這個不能被賦值或移位所以它不能被列印出來。
(1)c語言指針函數不用括弧擴展閱讀:
關於字元串指針
1.字元數組中存儲一個度字元串
Char字元串[]="LinuxC";
Printf("%s\n",字元串);
字元串是一個字元數組的名稱,它也是應答字元數組的第一個地址。
2.使用字元串指針指向一個字元串
如果你不想定義一個字元數組,你可以用一個指針指向一個字元串,稱為「字元串指針」,例如:
Char*p="LinuxC";
Printf(「%s\n」,p);
「LinuxC」是一個字元串常量。字元串常量的C語言:在內存中打開一個字元數組來存儲字元串常量,並將打開的字元數組的第一個地址保存到p。

『貳』 c語言為什麼有的時候malloc前不加括弧

c語言不算強類型,
有隱式轉換。
加不加都沒太大關系。
malloc
返回值是void*
你可以用char*
int*
Buffer*等等一切指針去接受malloc的結果,
但是為了不出那個討厭的warning,
也讓人看的舒服些,
你可以強制轉換一下。比如char*
p
=
malloc(100);
可以寫成char*
p
=
(char*)malloc(100);
void*
p
=
malloc(100)不會warning,
因為類型匹配

『叄』 c語言中指針的定義問題。為什麼*q加括弧

加不加括弧,是數組指針,還是指針數組的區別
*p[2] 是一個指針數組,首先它是一個數組,數組中存的是指針,存指針的數組。
(*q)[2] 是數組指針,加括弧先與 *結合,它是一個指針,指向一個第一維包含2個元素的2維數組,存數組地址的指針。

q=s ; 把 數組 s 的地址存入 q
p[0]=s[0] 把s[0] 第0行的首地址存入 數組p[0]中

『肆』 C語言指針問題!

首先,要說明的是:數組名,是一個指針,它指向存放數組元素的一塊內存區域,那麼數組元素是怎麼被引用的呢,我舉個例子。如a[3],編譯系統會首先找到這個數組的首地址,即a,然後根據〔〕中的值確定地址偏移量,即3,由此便確定了,要引用的元素是地址a+3所指向的單元的內容。你知道〔〕叫什麼嗎?它不只是「方括弧」,在C中它的名字叫「偏址運算符」,由此可知它的作用是什麼。在C++中,〔〕是可以被重載的。

明白了上面那一點後,再來看,那麼指針變數p和數組名a便具有了相同的性質,即:都是一個指針。

(1)p+1,a+2,p++,p=p+1,p-a當然都是合法的了。因為它們是相同類型的量之間進行的運算。只不過,這個量不同於一般存放數據的量,它存放的是地址罷了。

(2)a++,a=a+1,a=a-1之所以非法,是因為一旦為數組分配了內存空間後,其首地址是確定的了,就相當於一個常量,常量怎麼可以改變呢?

這里,你可能會有點疑惑。但我只想說一句:「對變數(或常量)的引用不等於改變這個變數(或常量)」,你好好的揣摩一下。如p-a,a-2等只是引用a的值進行計算,但a本身的值並沒有改變,而a++,即a=a+1卻是硬生生地嘗試去改變a,你看,是這樣的嗎?或許換個寫法你看著更直觀一些,如:k=p-a與a=a-1

(3)關於它們的意思,其實我前面已經說了。既然p,a是指針,存放的是地址,那麼對它們的操作當然是改變地址的運算了,如p+1就指向地址為P+1的這個內存單元,。。。。。
對於a++,a=a-1這些非法的傢伙嘛,就不用多說了,它試圖去改變有用的數據單元,是絕對不能容忍的,我們需要的是穩定。。。。

===================
有括弧的情況下func是一個函數指針,而沒括弧它返回一個int指針函數。
函數指針是指向函數的指針變數。
每一個函數,即使它不帶有返回某種類型的指針,它本身都有一個入口地址,該地址相當於一個指針。函數指針」是指向函數的指針變數,因而「函數指針」本身首先應是指針變數,只不過該指針變數指向函數。

指針函數是指帶指針的函數,即本質是一個函數。我們知道函數都又有返回類型(如果不返回值,則為無值型),只不過指針函數返回類型是某一類型的指針。

『伍』 C語言 函數指針調用時加星號與不加星號都行是為什麼

定義,因為它是定義。不帶「*」,就無法區分是指針還是變數。
&:叫做,取地址符。p1=&a;其實就是把a的地址取出來,賦給p1。
你可以這么理解,*P1才是和變數a同一個等級的東西。&相當於降級取地址,那p1去掉星號*也相當於取地址。通俗來說*p本身就是為了地址操作而存在的,比如地址的交換,傳遞之類的。
我縱觀你正在學的知識點,悄悄告訴你一個規律。你是否發現在調用的時候一般是沒有*號的。
比如swap(p1,p2);(這里是引用函數,不是定義函數)。
比如for中和scanf中的p++
再比如數組賦值:p=a(這里的a是數組首地址)
像printf和定義指針,一般是*p
請你細細理解,好好品味。
我只是心血來潮答個題。越學到後面你會發現指針很靈活。送我個贊,我得不到什麼,但你肯定能得到很多。

『陸』 C語言函數指針怎麼用

有函數: int fun(int a,int b);
要定義指向該函數的指針
對比指向 int a; 的指針
int *p; p = &a;
p的定義是怎麼來的?
首先要保證p是一個指針類型
寫下(*p),
然後,考慮下p的基類型,
p的基類型就是變數a的類型int
將int 放在(*p)前面就行了
int (*p);
括弧可以省略,就成了 int *p;

同理
想要實現 pf = &fun;
(*pf) 將pf定義為一個指針,
將fun的類型作為pf的基類型
fun相當於一個 int (int a,int b)類型的量
int (int a,int b) (*pf);
基類型中有圓括弧和中括弧要後移
int (*pf)(int a,int b) ;//括弧不能省略
pf = &fun;
調用時
(*pf)(3,4); pf(3,4)都可以

『柒』 C語言指針問題,急。。 為什麼函數現實錯誤少了一個括弧

調用函數 實參不能加類型 直接reverse(str);即可

『捌』 c語言中函數不帶括弧可不可以

不可以
函數格式為
返回值 函數名(參數列表)
{
函數體

}
無論是參數列表的小括弧 還是函數體的大括弧 都是不能省略的。

『玖』 在C語言里,一個有參數的函數調用時不帶括弧

結構體struct unicast_callbacks有兩個函數指針成員。

static const struct unicast_callbacks unicast_callbacks = {recv_uc};
是在定義一個結構體類型struct unicast_callbacks的靜態(static)常量(const),常量名是unicast_callbacks,{recv_uc}是在對結構體常量進行初始化,將第一個函數指針賦值為recv_uc。

『拾』 C語言指針函數

如果在程序中定義了一個函數,那麼在編譯時系統就會為這個函數代碼分配一段存儲空間,這段存儲空間的首地址稱為這個函數的地址。而且函數名表示的就是這個地址。既然是地址我們就可以定義一個指針變數來存放,這個指針變數就叫作函數指針變數,簡稱函數指針。

那麼這個指針變數怎麼定義呢?雖然同樣是指向一個地址,但指向函數的指針變數同我們之前講的指向變數的指針變數的定義方式是不同的。例如:
int(*p)(int, int);
這個語句就定義了一個指向函數的指針變數 p。首先它是一個指針變數,所以要有一個「*」,即(*p);其次前面的 int 表示這個指針變數可以指向返回值類型為 int 型的函數;後面括弧中的兩個 int 表示這個指針變數可以指向有兩個參數且都是 int 型的函數。所以合起來這個語句的意思就是:定義了一個指針變數 p,該指針變數可以指向返回值類型為 int 型,且有兩個整型參數的函數。p 的類型為 int(*)(int,int)。

所以函數指針的定義方式為:
函數返回值類型 (* 指針變數名) (函數參數列表);
「函數返回值類型」表示該指針變數可以指向具有什麼返回值類型的函數;「函數參數列表」表示該指針變數可以指向具有什麼參數列表的函數。這個參數列表中只需要寫函數的參數類型即可。

我們看到,函數指針的定義就是將「函數聲明」中的「函數名」改成「(*指針變數名)」。但是這里需要注意的是:「(*指針變數名)」兩端的括弧不能省略,括弧改變了運算符的優先順序。如果省略了括弧,就不是定義函數指針而是一個函數聲明了,即聲明了一個返回值類型為指針型的函數。

那麼怎麼判斷一個指針變數是指向變數的指針變數還是指向函數的指針變數呢?首先看變數名前面有沒有「*」,如果有「*」說明是指針變數;其次看變數名的後面有沒有帶有形參類型的圓括弧,如果有就是指向函數的指針變數,即函數指針,如果沒有就是指向變數的指針變數。