c語言返回值指針
㈠ c語言 函數指針作為返回值
C語言指向函數的指針承載的信息比較復雜,組織起來要素要寫全。根據指向函數的指針的書寫語法,下面的代碼就是一個返回函數指針的函數:int (*f(void))(int){//f是函數,沒有參數,返回指向一個函數的指針;這個被指向的函數有一個int型形參,且返回一個int值 return fun;//fun是個函數名,必須具備一個int形參、返回int值的要求}以下代碼可以驗證上述函數的正確性:<pre t="code" l="cpp">//#include "stdafx.h"//If the vc++6.0, with this line.
#include "stdio.h"
int fun(int n){
printf("abcdef\n");
return n;
}
int (*f(void))(int){
return fun;
}
int main(void){
printf("%d\n",f()(100));//調用函數f,通過f返回的指針用100調用函數fun
return 0;
}輸出是:abcdef100
㈡ c語言 函數返回數組指針
由於你在子函數int *shuzu(void)中定義的數組 a[4];屬於局部變數,在子函數結束時會被釋放,所以返回的指針變成野指針,會亂碼;簡單的解決方法有兩種,1. 將數組定義在主函數之前(#include <stdio.h>下面),那麼就變成了全局變數,不會被釋放了;2.使用malloc或者calloc開空間後再賦給這個數組,這樣也不會被釋放了;第一種方法有缺點,以後學到全局變數的時候會知道,第二種方法估計你還沒學到,不過很簡單,網路一下就會了~~~
㈢ C語言指針與返回值
函數A的返回值錯誤。雖然地址和指針很像,但還是不同的兩個東西。而且,一旦出了函數A,返回的地址,也就該被回收,會導致程序出錯。是非常危險的行為。
舉個例子說明下吧。
int *p=a;
這個,在數值上,p是和a的地址相等的,也就是有p==&a。
這時如果a=1;那麼你知道*p==1,是真。
但是此時,p存儲的是a的地址,p還有自己本身的地址。就好比,你(p)坐在座位上,用手指向另一個座位(&a)一樣。那個座位就是a的地址,上面坐著誰(1),就是a的值。你本身就是指針了。
所以說,返回值是指針和地址是完全不同的兩個概念。所以就是錯誤的!
B函數為啥正確呢?因為NULL是一種特殊的指針,叫空指針。所以是可以算作正確的。
㈣ 一個C語言 關於函數返回值 還有指針相關的問題
*p是指針,操作的是實際的數據塊,return語句是返回一個指定值給調用者,調用者可選擇保留;
如果直接把int型變數a直接傳遞給指針p,p可能超出用戶地址空間,崩潰了。
指針永遠操作的是數據塊,不論它是元類型(int,float,char......)還是高級結構(函數,結構體,鏈表,甚至類的對象),只需注意類型匹配和使用規則。
㈤ C語言 函數返回指針
首先,說一下第一個問題,第一個不交換是因為定義的k是一個指針,指針說白了就是一個指向,我指向你,他指向她,然後換成我指向她,他指向你,你把他們指向的位置交換,而並沒有交換他們地址裡面存儲的值,這樣是並沒有任何區別,在最後函數結束之後,函數的那些指針指向全部釋放,和修改不修改沒什麼兩樣;定義的是一個整型變數,他把s
指針指向的地址裡面的值與
t
指針指向的地址的值進行了交換,這樣就修改了內存裡面的值,即便是函數結束了也不會釋放,自然就能做到交換了。
第二個問題,存儲地址是會釋放,但是釋放的是函數內部定義的局部變數,現在你已經把s的地址通過return
返回回來並且存在
主函數的
r
中了,所以自然就不會釋放了
㈥ C語言指針與返回值
void定義過後的函數不是說它沒有返回值,而是它返回的是個空,也就是null,可以加return
null,也可以不加。當你定義函數時看最後你需不需要用到這個函數最後的結果,如果不需要就可以給這個函數定義void,如果需要則相應的加上它的返回類型。每個函數在定義的時候都要加返回類型,不需要返回值則定義為void,記住null並不是代表它沒有返回值,而是返回的是空,只有在java或者c#它們的構造函數才是唯一沒有返回值的函數。
㈦ C語言 關於指針函數返回值
struct student *p, *q, *head;
這里head不就是 struct student 類型的指針么。
㈧ c語言 函數返回指針
你寫錯了,正確的應該是如下兩種:
int *a(int, intint)
與
int (*a)(int ,int)
這兩種形式第一種表示返回一個指向整形變數的指針,第二種為指針指向一個含有兩個整形變數參數的函數。
㈨ C語言函數的返回值為指針時的問題
week_day作為lookstr()的參數,經過函數lookstr()提取之後,return(table[day]),得到一個靜態字元串的指針;輸入數字有誤情況下return(NULL)。
㈩ C語言怎麼讓一個函數返回指針
這種方式叫做「用指針函數*creat()的返回值來傳遞動態內存」,這是一個C語法
首先你要注意,子函數*creat()用了malloc動態申請內存,而return返回的是指針變數所指向的地址,而不是指針!相當於將你所申請的動態內存返回給主函數
int
*fun(void)//這里是指針函數
{
int
*p
=
(int
*)
malloc
(int);//動態申請內存//p在這里指向了一塊合法內存的地址
return
p;
}
void
main(void)
{
int
*q
=
NULL;
q
=
fun();//fun()返回指針p所指向的地址,(指針p是在棧上創建的,所以*fun()函數運行完,指針所分配的內存被系統自動釋放)這時q指向p,得到了malloc所申請到的內存
free(q);//釋放動態內存
}