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

c語言中的函數與指針的摘要

發布時間: 2022-11-04 23:24:43

1. C語言中,指針函數和函數指針有什麼區別

在C語言中指針函數和函數指針是兩個不同的概念,不能混淆。
指針函數本質上是函數,是一個返回類型為指針的函數,如:
int* max(int *array,int n)
{
//找最大值的地址
return 最大值的地址;
}
max就是一個指針函數。
而函數指針本質上是指針,是指向函數的指針,如:
int (*funp)(int a,int b);
funp就是一個函數指針,可以用它指向一個返回類型為int、有兩個int類型的參數的函數。

2. C語言的函數,變數,指針這些術語到底有什麼作用,舉例說明吧,越簡單易懂越多文字解答越好

看你的需要了,有時不用指針作為參數達不到你要的效果,比如一個swap()函數。
int swap(int a,int b)
{
int tmp;
tmp=a;
a=b;
b=tmp;
}
如果你想調用該函數交換兩個變數的值,在主函數中輸出,那是不可能的。比如這樣調用:
int x=1,y=2;
swap(x,y);
printf("%d %d",x,y);
你認為會輸出2 1嗎?錯!還是會輸出1 2的。因為傳入swap()函數的只是x,y的拷貝,而不是它們自身。
如果要真正達到交換的目的,就要用指針傳值。這樣定義函數:
void swap(int *a,int *b)
{
int tmp;
tmp=*a;
*a=*b;
*b=tmp;
}
但是給函數傳值時要注意,指針是指向地址的,所以參數要是地址,即需要給變數取地址。
int x=1,y=2;
swap(&x,&y);
printf("%d %d",x,y);
這樣就是輸出2 1了

3. 關於C語言指針和函數的問題(追加分)

這么給你解釋吧,指針就相當是一個門牌號。第一個呢,是因為f()函數的參數是指針,就是「門牌號」,所以他們交換的時候是把門牌號進行了交換。所以當你第二次進行訪問的時候,原來A房間變成了B房間,所以當你想要讓A房間里的人出來的時候,這個時候原來住在裡面的B君就出來了。所以發生了交換。
第二個呢,傳的是形參,形參就是把A君復制一個(我們理解為克隆一個A君),然後克隆一個B君,最後把克隆人交換。然後我們輸出的時候,我們卻要A房間里的人,那個時候,A君還在自己的房間,當然他們出來的時候,就是沒有交換了。如果,要交換,我們可以輸出克隆人。那麼看到的結果就是已經發生了交換。
我把第二個代碼,給你稍微改下,就是輸出克隆人,那麼你就會看到,我們原來交換的只是克隆人了。
============
第二個
#include<stdio.h>
void main()
{void f(int x,int y);
int a,b;
scanf("%d,%d",&a,&b);
f(a,b);
}
void f(int x,int y)
{int p;
p=x;
x=y;
y=p;
printf("%d,%d",x,y);
}
輸入5,9
輸出9,5
===========

有不明白的繼續追問!

4. C語言中一個關於指針與函數的問題

這個原因很簡單.
因你的程序是單線程/單任務
且在你p=f1();後,沒有執行過其它任何程序
p指向的內存的值沒有被改變,所以結果是正確的
若你再定義一個函數,如
int
ttt()
{
int
x[10],i;
for(i=0;i<10;i++)
x[i]=i;
}
而你在
p=f1();
後面執行一下這個函數
...
p=f1();
ttt();
printf("%d\n",*p);
....
你看下結果
若程序是多線程多任務的
那情況就更復雜,你最終的*p值就不得而知了
所以C指針是有完全性問題的,程序的某些BUG就是這樣產生的

5. C語言中關於指針變數與函數的用法。

#include<stdio.h>
1.申明數組
a[5],下標是應該從0~4的;
2.進行排序時需要用2個變數進行冒泡排序;
3.scanf時%d後面不需要空格。
程序修改如下:
void
pa(int
*a,int
n)
{
int
i,j;
int
t;
for(i=0;i<n;i++)
for(j=0;j<n-i-1;j++)
if(*(a+j)>*(a+j+1))
{
t=*(a+j);
*(a+j)=*(a+j+1);
*(a+j+1)
=
t;
}
}
void
main()
{
int
a[5],i;
for(i=0;i<5;i++)
scanf("%d",&a[i]);
printf("未排序前的數列為:\n");
for(i=0;i<5;i++)
printf("%d
",a[i]);
pa(a,5);
printf("排序後的數列為:\n");
for(i=0;i<5;i++)
printf("%d
",a[i]);
}

6. C語言中的函數指針和指針函數怎麼理解

簡言之,函數指針就是指向函數(函數入口地址)的指針,指針函數就是返回數據類型為指針的函數
函數指針:void (*fun)(); 指針函數:type *fun();其中type為數據類型,比如char,int等等