⑴ 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>后,会在串为添加串结束符'