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

c語言指針調用無參數子函數

發布時間: 2022-06-15 06:54:21

A. c語言指針在函數調用中的問題

這說明你對指針和函數參數傳遞的理解不到位

這個程序里你想用函數F改變p,那麼就要給F傳遞p的地址,p的類型是int*,那麼它的的地址類型是int**,傳遞&p給F:

intmain()
{
voidF(int**p);//int**

int*p=NULL;
F(&p);//傳地址
printf("%d",*p);
deletep;//釋放
return0;
}
voidF(int**p)//int**
{
*p=newint;
**p=1;
}

或者用C++的引用:

intmain()
{
voidF(int*&p);//int*&

int*p=NULL;
F(p);//這里就是引用了
printf("%d",*p);
deletep;//釋放
return0;
}
voidF(int*&p)//int*&
{
p=newint;
*p=1;
}

B. c語言中,一些關於子函數,參數的問題。。

這個問題你學到指針就明白了,

swap()函數中intx,y;都是重新開辟的內存的,

只是取了main函數中a,b的值而已本身和a,b是沒有任何關系的。

你交換只是交換了新內存中x,y的值,而這塊新內存中的值會在,函數執行完畢後被系統收回。

所以對main函數不造成任何影響。除非用指針變數直接對內存進行操作。

C. C語言指針調用函數問題

編寫一個程序,採用結構數組記錄許多學生的信息。這個程序允許用戶輸入信息來填充該數組,並列印出數組內容。
編寫一個程序,採用一個結構體存放學生信息。應當使用子程序/函數來填寫學生結構變數和列印學生結構變數的內容。
沒有說一定要用指針啊……

D. C語言指針和和調用函數的問題

你的swap函數沒返回值。如果是用參數做返回值,要確實改變其地址保存的值,函數內部改指針指向沒用,那指針是局部變數,函數執行完就被回收,而原本的實參的值是沒改變的。
這樣做就能確實改變其指針指向地址的值
void swap(int *p1,int *p2)
{
int temp;
temp=*p1;
*p1=*p2;
*p2=temp;
}

E. C語言指針調用函數問題,急求解釋(本題是《c和指針》上的題目)

我不清楚你的疑問到底指哪些。我就你寫的這些代碼解讀:
int read_column_numbers(int columns[], int max)函數功能:
傳參數組首地址,及數組最大長度。
用戶輸入max個整數,只保存其中的正整數(負數忽略),如果正整數的個數是偶數則返回個數。否則程序結束。
void rearrange(char *output,char const *input,int n_columns, int const columns[])函數功能:
傳參 數組output首地址 , 數組input首地址 ,用戶輸入正整數個數,正整數數組
迭代數組,根據用戶的輸入的數字作為input起始下標,復制並拼接到數組output中(具體邏輯我不研究了)。
strncpy(output + output_col,input + columns[col],nchars)這里就是就是拼接復制,變數output_col記錄的是output 已保存字元長度,output + output_col就是每次接在已有字元後面放復制的字元。input + columns[col]是用戶輸入的數字作為起始位置的偏移量取nchars個字元復制到output 中。
總結:
一、
首先數組名作為參數傳遞,無論形參定義是指針還是數組(int *columns 和 int columns[ ]效果是一樣的),最終都是傳地址。
二、
數組形參定義char const *,修飾符const表示常量不可修改,這里const修飾的是*input,表示數組指針指向的地址內容不能修改,但是數組指針本身值可以修改。也就是說函數中可以改變input指向的地址(比如input++),但是不能改變其指向的值(比如input[0]='A')。

F. 關於c語言指針調用函數。。。。。。。。

第一行,定義一個函數指針p,該函數有兩個整型形參,且返回整型數據;第二行,讓函數指針p指向一個地址,該地址應該就是前面說到的那種函數的地址,需要對這個地址做強制類型轉換為同類型的函數指針,才能正確賦值給p。

G. 有關於c語言中函數調用和指針

函數參數用值傳遞時,函數的形參只不過是實參的拷貝而已。也就是說,1中調用swap函數時,內存中實際上a,b,x,y四個變數都存在,x是a的拷貝,y是b的拷貝,對x,y的值進行交換,a,b的值並未交換。

而2中用了指針傳遞,swap中的a,b,實際上是指向了main中的a,b。這個swap中交換的是a,b指向的變數的值,也就是交換了main中的a,b的值。

H. 在C語言中,指向函數的指針怎麼調用函數

1樓感覺對函數指針不是很了解,就不評論了. 2樓的基本還可以,但是int (*p)(),然後讓它指向max函數,一個包含兩個未知量的函數,這在後來的標准c裡面是不支持的好像. 3樓吧,那麼多*,感覺有點不大對. *是取內容,連著那麼* ,我沒試過,沒有多少意義至少.他11級了,應該也不會怎麼有錯,你可以試試(我不打算加那麼多*, 就不調試了).
程序裡面對函數的調用,就是通過函數的入口地址,然轉入函數. 這樣的話,函數指針的意義就明顯了.函數指針指向了函數的入口,即函數指針里是函數的入口地址. 指針不能指向函數這種說法肯定是不對的.話說回來,1樓的老兄可能看錯書了,或者記錯了.
類型匹配很重要,二樓的聲明和使用不一致,這在老版的編譯器里也是支持的.那時候ANSI標准還沒有制定出來.現在而言,這種定義應該不被支持了才是.
那個聲明應該如下:
int (*p)(int , int);
這樣才能指向
int name(int,int)型的函數.么有實驗過,但按這種寫法是不錯的肯定.
三樓那個********p,怎麼都覺得不對.

I. C語言調用函數指針

並不是不規范的問題,你子程序寫法只能在子程序中輸出正確的數據,而在主函數中無法得到交換過的x和y的值。參考程序運用指針讓子程序去讀寫a和b的值,在子程序執行完成後,a和b的值確實得到了交換。

你的程序中子程序採用的不是指針類型參數,這樣子程序無法將交換過後的值傳回來。

J. c語言中的指針問題,以及子函數的調用

第一個是在根據指針, 交換指針所指的數據
第二個雖然寫的使用"指針"在實現, 實際上, 他是在獎p1 和p2兩個本地的變數值進行交換, 而並不是獎兩個地址所指向的內存單元進行交換
第二個函數你如果吧所有的int * 都改成int, 就能更清楚的看到他到底在幹嘛了