导航:首页 > 编程语言 > 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语言指针编程实例相关的资料

热点内容
编译器原理与实现书 浏览:708
dos选择命令 浏览:16
apm固件编译到单片机 浏览:120
联通深蓝卡都包含什么app 浏览:263
如何判断网络服务器正常 浏览:649
路由器搭桥远端服务器地址是什么 浏览:515
编译动态库时会连接依赖库吗 浏览:707
淘宝手机加密是随机的吗 浏览:672
解压包子怎么装饰 浏览:585
四个数凑24算法 浏览:676
哪一种不是vi编译器的模式 浏览:169
xp在此处打开命令窗口 浏览:128
代码编译运行用什么软件 浏览:999
动态库在程序编译时会被连接到 浏览:761
python超简单编程 浏览:260
获取命令方 浏览:977
怎样制作文件夹和图片 浏览:60
调研编译写信息 浏览:861
python冯诺依曼 浏览:419
同时安装多个app有什么影响 浏览:254