c語言怎麼返回指針
A. c語言 帶指針的函數 如何讓它return指針
1、C語言屬於高級編程語言。在C語言中一個函數不能返回局部地址即指針。
2、例如:
int
*
func(void)
{
int
a=
10;
int
*p
=
&a;
return
p;
}
a變數的區域是func()函數,在函數內有效,出了函數就釋放了,此時p指向的是一個未知
地址,屬於錯誤用法。
正確用法
int
*p
=
NULL;
int
*
func(void)
{
p
=
malloc(sizeof(int));
if(p!=NULL)
{
*p
=
10;
}
return
p;
}
B. C語言怎麼讓「函數」返回「指針數組」
首先,你不應該返回局部變數的指針,因為局部變數在離開函數後就會被銷毀。如果你想這樣返回一個數組的話,你應該malloc出一個數組來返回。
至於應該return什麼,return
(malloc出來的那個指針)就可以了。
例如
int**
foo()
{
int
**p
=
(int
**)malloc(sizeof(int
*)*10);
...
...
...
return
p;
}
這個p指向一個內存段,這個內存段存有十個int*類型的元素。
C. C語言怎麼讓「函數」返回「指針數組」
你好
從問題來看,似乎你對於指針的概念沒太理解。指針變數中存儲的是內存中的地址,而實際的數據放在這個地址中。
按照這段代碼來說,int* 聲明的指針指向內存中的一塊地址,而在這塊地址中存儲著一個整形數值。所以要返回這樣的值,也就相當於是返回一個內存地址。因此,在程序中有兩種具體的解決辦法:
1.在調用函數的時候,直接將變數的指針(即內存地址)作為參數傳入,在函數執行的時候,就會自動對內存中相應地址的數據進行操作。使用這種方法也就不需要返回值了。具體到這段代碼中,就是在Main中聲明int* tempA[10],把foo函數聲明為void foo(int* a[10]),調用時用foo(tempA),在foo函數中直接使用a[10]即可。
2.直接把內存地址作為返回值,因為在C中,數組名就是數組首元素的指針,因此直接返回數組名就可以了,即return a即可。如果是普通變數,要用取內存地址的運算符&,比如聲明了整型變數 int i,就可以return &i。這與printf函數中的使用方法是相通的。
【按照補充的內容:】
a-------->a1-------->i1
|-------->a2-------->i2
|……………………
|-------->an-------->im
這樣的調用方法,只能保證a1-an不被修改,怎麼保證i1-im不被修改?
希望以上回答能幫到你。【PS.很久沒用C了,如果哪裡出了差錯,請指正。】
D. c語言 函數返回數組指針
由於你在子函數int *shuzu(void)中定義的數組 a[4];屬於局部變數,在子函數結束時會被釋放,所以返回的指針變成野指針,會亂碼;簡單的解決方法有兩種,1. 將數組定義在主函數之前(#include <stdio.h>下面),那麼就變成了全局變數,不會被釋放了;2.使用malloc或者calloc開空間後再賦給這個數組,這樣也不會被釋放了;第一種方法有缺點,以後學到全局變數的時候會知道,第二種方法估計你還沒學到,不過很簡單,網路一下就會了~~~
E. C語言返回結構指針的函數
進入fun函數時,會創建一個局部變數形參stu,這個形參stu與實參stu1不是一回事,stu只是與stu1數據一模一樣的復製品而已。當fun函數對stu操作結束後返回stu的指針,但因為stu是局部變數,在fun函數結束後會釋放掉,由於main函數使用fun函數返回的指針pp,pp指向了已被釋放掉的stu,所以列印時必然輸出些亂碼。
F. C語言 函數返回指針
首先,說一下第一個問題,第一個不交換是因為定義的k是一個指針,指針說白了就是一個指向,我指向你,他指向她,然後換成我指向她,他指向你,你把他們指向的位置交換,而並沒有交換他們地址裡面存儲的值,這樣是並沒有任何區別,在最後函數結束之後,函數的那些指針指向全部釋放,和修改不修改沒什麼兩樣;定義的是一個整型變數,他把s
指針指向的地址裡面的值與
t
指針指向的地址的值進行了交換,這樣就修改了內存裡面的值,即便是函數結束了也不會釋放,自然就能做到交換了。
第二個問題,存儲地址是會釋放,但是釋放的是函數內部定義的局部變數,現在你已經把s的地址通過return
返回回來並且存在
主函數的
r
中了,所以自然就不會釋放了