導航:首頁 > 編程語言 > c語言指針編程實例

c語言指針編程實例

發布時間:2022-09-12 19:08:31

⑴ C語言指針編程

代碼文本:

#include "stdio.h"

#define N 10

#define F(x) ((x)>0 ? (x) : -(x))

int f(int *p){

int i,mini;

for(mini=0,i=1;i<N;i++)

if(F(p[mini]) > F(p[i]))

mini=i;

printf("%d ",p[mini]);

return mini;

}

int main(int argc,char *argv[]){

int a[N],i;

printf("Enter the %d integers... ",N);

for(i=0;i<N;scanf("%d",a+i++));

printf("The subscript is %d ",f(a));

return 0;

}

⑵ c語言的函數指針舉個例子

函數指針告訴CPU下一步需要執行哪裡的代碼的指針, 一數組十分相像.

#include<stdio.h>
voidfunction(inti,doubled)//一個函數的聲明
{
printf("函數運行,%d,%lf ",i,d);
}
voidAnotherFunction(inti,doubled)//另外一個函數聲明
{
printf("又一個函數運行,%d,%lf ",i,d);
}
intmain()
{
void(*pFun)(int,double);//定義了一個函數指針
int(*p)(int,double);//用於調試的函數指針
pFun=function;//讓這個函數指針指向第一個函數
pFun(10,10.101);//通過這個函數指針來調用第一個函數

pFun=AnotherFunction;//讓這個函數指針指向第二個函數
pFun(20,20.202);//通過這個函數指針來調用第二個函數

//若將以下代碼取消注釋,就會產生錯誤
/*
p=function;
p=AnotherFunction;
//原因很簡單,因為p是必須指向一個返回值為int,第一個參數為int,第二個參數為double的函數,但是在此代碼中定義的函數返回值是void
*/

//這個實驗中,直接用函數名來賦值了,是因為函數名其實就是這個函數的指針
//而在平常調用函數時,都要加上(),如:printf("");
//這里,"()"就相當於'*'(就是取值運算符),printf是函數指針,就相當於是數組名,即數組的首地址

return0;
}

⑶ 用c語言指針編程

有點麻煩,試試~~

最近考試有點忙,~
還未通過編譯,你自己看著改改,我會盡快再發給你的。~~
1、首先格式化輸入到棧,形式為:(字母開始,字母結束,空格分開不同單詞,空格不能連續)。
2、構建子棧,步驟:由母棧經格式化(取每個單詞後半部到子棧)。
3、排序。
4、輸出。

子棧元素首行格式為(堆棧元素 + 指向一數據結構的指針)

#include<ctype.h>
#include<stdio.h>
#define STACK_INT_SIZE 100 //存儲空間初始分配量
#define STACKINCREMENT 10 //存儲空間分配增量
#define OK 0
typedef struct C_Node{
char elem;
struct C_Node *next;
}C_Node;
typedef struct C_Stack{
char C_elem;
char *base;
char *top;
C_Node *C_next;
}C_Stack;
typedef struct{
char *base;
char *top;
int stacksize;
}SqStack;
Status InitStack (SqStack &S)
{ S.base=(ElemType*)malloc(STACK_INIT_SIZE*sizeof(ElemType));
if (!S.base) exit (OVERFLOW); //存儲分配失敗
S.top = S.base;
S.stacksize = STACK_INIT_SIZE;
return OK;
}
Status Push (SqStack &S, char e) {
if (S.top - S.base >= S.stacksize) {//棧滿,追加存儲空間
S.base=(ElemType *)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof (ElemType));
if (!S.base) exit (OVERFLOW); //存儲分配失敗
S.top = S.base + S.stacksize;
S.stacksize += STACKINCREMENT;
}
*S.top++ = e;
return OK;
}

format_input()
{int Finish=0,flag;
char ch;
while(!Finish)
{flag=0;
scanf("%c",&ch);
if(' '==ch)
else if(isalpha(ch)){
if(0==flag)
else
}
else
}
}

Creat_C_Stack()
{指向 M_Stack 內元素的指針p(用於指向一個單詞的最後字母),q(指向p的前方第一個空格元素);
指向 C_Stack 首行元素的指針C_i(),及隨後元素的C_i_j(insert_place);
q=M_Stack.top;
p=M_Stack.top;

i=0;
q=top;
p=top-1;
num=0;
while(1)
for(;q.elem!=' ';)
q--;
i=(p-q-1)/2;
Insert_P=C_Stack[num];
Insert_P.elem=p.elem;
p--;
for(j=0;j<i;j--)
Insert_P.next=Insert_P.next;
Insert_P.elem=p.elem;
p--;
if(q==M_Stack) return;
}
Sort()
{C_Stack C_p=C_Stack[j],C_q=C_Stack[j+1],C_Temp;
for(C_p.next!=NULL&&C_q.next!=NULL)
{if(C_p.elem!=C_q.elem){
if(C_p.elem>C_q.elem){
C_temp=C_p;C_q=C_p;C_p=C_temp;
}
else
}
}
}
output()
{for(i=0;i<C_num;i++){
q=C_Stack[i];printf("%c",q.elem);
for(q.next!=NULL){
q=q.next;
printf("%c",q.elem);
}
}
}

#include<stdio.h>
void main()
{printf("只有空格和字母為有效字元,\n");
printf("其他字元將使輸入結束。\n");
format_input();
Creat_C_Stack();
Sort();
Output();
}

⑷ c語言中函數指針是什麼 有什麼用 舉個實例

函數指針是指向函數的指針變數。 因而「函數指針」本身首先應是指針變數,只不過該指針變數指向函數。這正如用指針變數可指向整型變數、字元型、數組一樣,這里是指向函數。

函數指針有兩個用途:調用函數和做函數的參數。


函數指針的聲明方法為:

返回值類型 ( *指針變數名) ([形參列表]);

如:

int func(int x); /* 聲明一個函數 */

int (*f) (int x); /* 聲明一個函數指針 */

f=func; /* 將func函數的首地址賦給指針f */

或者使用下面的方法將函數地址賦給函數指針:

f = &func;

賦值時函數func不帶括弧,也不帶參數,由於func代表函數的首地址,因此經過賦值以後,指針f就指向函數func(x)的代碼的首地址。

下面的程序說明了函數指針調用函數的方法:

#include<stdio.h>
intmax(intx,inty){return(x>y?x:y);}
intmain()
{
int(*ptr)(int,int);
inta,b,c;
ptr=max;
scanf("%d%d",&a,&b);
c=(*ptr)(a,b);
printf("a=%d,b=%d,max=%d",a,b,c);
return0;
}

⑸ C語言:一個指針的程序例題,

scanf()函數讀入數據後,會將最後的空白符(<space>、<Tab>和<CR>)留在輸入緩沖區,如

inta;
charstr[100];
scanf("%d%s",&a,str);

用 23 asd<CR>響應時,3前面的空格和3與a之間的空格被當作分隔符讀入後丟棄,而最後的<CR>仍保留在輸入緩沖區中。

gets()函數對空白符的處理方法與scanf()不同,會將所有的空白符看作是串的一部分,以<CR>作為結束讀入的字元,這個<CR>不會保存在串中,遇到<CR>後,會在串為添加串結束符'',也就是說,gets()函數會將輸入緩沖區中每個字元都讀出來。

為了防止讀入的字元串長度超過數組長度,目前流行的做法是用fgets(char str[],const size_t size,stdin)函數讀取字元串,讀到size - 1個字元後,立刻結束讀入過程,並將str[size]置為''。如果輸入的字元數不到size - 1個,則會將' '作為字元串的最後一個有效字元保存在str中(這些美國人是怎麼想的?)。

編程中要注意的問題是:

一、如果scanf()後還是scanf(),第一個scanf()留下的空白符不會影響到下一個scanf()得到有效數據。

二、如果scanf()後是gets(),那麼scanf()留下的<CR>會使gets()立即結束讀入過程,根據gets()的轉換規則,從而使gets()讀取的字元串的第一個字元為''(空串)。

三、如果scanf()後是fgets(),情況與二相同。

四、如果gets()或fgets()後是scanf(),gets()不會留下任何殘留,即使留,也不會影響scanf()的正常讀入。

通過以上的介紹,我們知道,在讀入數據過程中,偶爾會添加語句getchar()的目的何在,事實上,只有在scanf()後是gets()或fgets()時是必要的,其他情況下是不必要的。

******************************************************************************

* 以上說的都是個人不全面的理解,偏頗之處難以避免,歡迎各位吐槽 *

******************************************************************************

⑹ 關於C語言指針的簡單的例子

p++就是每次把地址加一,那麼你scanf()以後輸入的內容放到的是地址增加的指針裡面,這樣就完成了自動*(p+i)=a[i]的過程。

⑺ c語言關於指針的例題

void
swap(int*,int*)函數接受的是一個指針,就算你可以理解成它拷貝了值,是,它拷貝了&x,&y到*a,*b里了,但是,你沒有發現,*a其實還是指向x嗎?這樣一交換,不就結了嗎。
舉個例子。
假設x的地址為0x0069857(亂編的),然後,傳遞進函數的時候,它只是傳值,並沒有傳引用,然後呢,int
*a把0x0069857復制為自己的值。這樣一來,還記得解引用嗎?*(a)=*(0x0069857)=x,因此t=*a不是就可以翻譯成t=x;
x=y;
y=t;
}
不是就交換了嗎?????

⑻ C語言指針編程

#include<stdio.h>
intmax(inta,intb)
{
returna>b?a:b;
}
intmin(inta,intb)
{
returna<b?a:b;
}
intmain()
{
inta,b,i;
int(*p[2])(int,int)={max,min};
scanf("%d%d",&a,&b);
scanf("%d",&i);
if(i==1||i==2)
printf("%d ",p[i-1](a,b));
return0;
}

⑼ 求C語言指針代碼

用指針法實現冒泡法排序的C語言程序如下

#include<stdio.h>

void bubblesort(int *a,int n){

int i,j,t;

for(i=0;i<n-1;i++){

for(j=0;j<n-1-i;j++){

if(*(a+j)<*(a+j+1)){

t=*(a+j);

*(a+j)=*(a+j+1);

*(a+j+1)=t;

}

}

}

}

int main(){

int i,a[]={32,98,51,28,12,38,57,43,115,21};

bubblesort(a,10);

for(i=0;i<10;i++){

printf("%d ",a[i]);

}

return 0;

}

⑽ 關於C語言指針的簡單的例子

p=a,p指向a[0],p+1,p指向a[1],p+2,p指向a[2],依次類推。用一個循環錄入,其實就是錄入a。

閱讀全文

與c語言指針編程實例相關的資料

熱點內容
python超簡單編程 瀏覽:257
獲取命令方 瀏覽:976
怎樣製作文件夾和圖片 瀏覽:58
調研編譯寫信息 瀏覽:859
python馮諾依曼 瀏覽:417
同時安裝多個app有什麼影響 瀏覽:253
奧術殺戮命令宏 瀏覽:182
用sdes加密明文字母e 瀏覽:359
單片機原理及應用試題 瀏覽:423
易語言開啟指定文件夾 瀏覽:40
馬思純參加密室大逃脫 瀏覽:322
文件夾冬季澆築溫度 瀏覽:712
京東有返點的aPp叫什麼 瀏覽:603
如何查看u點家庭伺服器是幾兆 瀏覽:262
python應用介面怎麼接 瀏覽:67
腐蝕怎麼進不去伺服器啊 瀏覽:359
linuxcpiogz 瀏覽:631
安卓中的布局是什麼文件 瀏覽:397
dex反編譯部分代碼無法查看 瀏覽:464
linuxandroid編譯 瀏覽:603