⑴ 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>後,會在串為添加串結束符'