C语言程序设计-笔记7-指针

例8-1  利用指针模拟密码开锁游戏。

#include<stdio.h>

int main(void)

{

int x=5342;          //变量x用于存放密码值

int *p=NULL;

p=&x;

printf("If I know the name of the variable,\

I can get it's value by name:%d\n",x);

printf("If I know the address of the variable "

"is:%x,then I also can get it's value by address:%d\n",p,*p);

return 0;

}

注:printf换行的2种方式:\和””

例8-2  取地址运算和间接访问运算示例。

#include<stdio.h>

int main(void)

{

int a=3,*p,x;

p=&a;

printf("a=%d,*p=%d\n",a,*p);

*p=10;

printf("a=%d,*p=%d\n",a,*p);

printf("Enter a:");

//scanf("%d",&a);

printf("a=%d,*p=%d\n",a,*p);

(*p)++;

printf("*a=%d,*p=%d\n",a,*p);

x=*p++;

printf("*a=%d,x=%d,*p=%d\n",a,x,*p);

printf("&a=%x,p=%x\n",&a,p);

return 0;

}

例8-3  角色互换。有两个角色分别用变量a和b表示。为了实现角色互换,现制定了3套方案,通过函数调用来交换变量a和b的值,即swap1()、swap2()和swap3()。请分析这3个函数中,哪个函数可以实现这样的功能。

#include<stdio.h>

void swap1(int x,int y),swap2(int *px,int *py),swap3(int *px,int *py);

int main(void)

{

int a=1,b=2;

int *pa=&a,*pb=&b;

swap1(a,b);

printf("After calling swap1:a=%d b=%d\n",a,b);

a=1;b=2;

swap2(pa,pb);

printf("Afer calling swap2:a=%d b=%d\n",a,b);

a=1;b=2;

swap3(pa,pb);

printf("After calling swap3:a=%d b=%d\n",a,b);

return 0;

}

void swap1(int x,int y)

{

int t;

t=x;

x=y;

y=t;

}

void swap2(int *px,int *py)

{

int t;

t=*px;

*px=*py;

*py=t;

}

void swap3(int *px,int *py)

{

int *pt;

pt=px;

px=py;

py=pt;

}

例8-4  输入年份和天数,输出对应的年、月、日。要求定义和调用函数month_day(int year,int yearday,int *pmonth,int *pday),其中year是年,yearday是天数,pmonth和pday指向变量保存计算得出的月和日。例如,输入2000和61,输出2000-3-1,即2000年的第61天是3月1日。

#include<stdio.h>

void month_day(int year,int yearday,int *pmonth,int *pday);

int main(void)

{

int day,month,year,yearday;

printf("input year and yearday:");

scanf("%d%d",&year,&yearday);

month_day(year,yearday,&month,&day);

printf("%d-%d-%d\n",year,month,day);

return 0;

}

void month_day(int year,int yearday,int *pmonth,int *pday)

{

int k,leap;

int tab[2][13]={{0,31,28,31,30,31,30,31,31,30,31,30,31},

{0,31,29,31,30,31,30,31,31,30,31,30,31}};

leap=(year%4==0 && year%100 !=0 )||year%400==0;

for(k=1;yearday>tab[leap][k];k++)

{

yearday-=tab[leap][k];

}

*pmonth=k;

*pday=yearday;

}

例8-5  冒泡排序。输入n(n10)个正整数,将它们从小到大排序后输出,要求使用冒泡排序算法。

#include<stdio.h>

#define MAXN 10

void swap(int *px,int *py);

void bubble(int a[],int n);

int main(void)

{

int n,a[MAXN];

int i;

printf("Enter n(n<=10):");

scanf("%d",&n);

printf("Enter %d integers:",n);

for(i=0;i<n;i++)

{

scanf("%d",&a[i]);

}

bubble(a,n);

printf("After sorted:");

for(i=0;i<n;i++)

{

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

}

return 0;

}

void bubble(int a[],int n)

{

int i,j,t;

for(i=1;i<n;i++)

{

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

{

if(a[j]>=a[j+1])

{

swap(&a[j],&a[j+1]);

}

}

}

}

void swap(int *px,int *py)

{

int t;

t=*px;

*px=*py;

*py=t;

}

例8-6  输入正整数n(n),再输入n个整数作为数组元素,分别使用数组和指针来计算输出它们的和。

#include<stdio.h>

int main(void)

{

int i,n,a[10],*p;

long sum=0;

printf("Enter n(n<=10):");

scanf("%d",&n);

printf("Enter %d integers:",n);

for(i=0;i<n;i++)

{

scanf("%d",&a[i]);

}

for(i=0;i<n;i++)

{

sum=sum+*(a+i);

}

printf("calculated by array,sum=%ld\n",sum);

sum=0;

for(p=a;p<a+n;p++)

{

sum=sum+*p;

}

printf("calculated by pointer,sum=%ld\n",sum);

return 0;

}

例8-7  使用指针计算数组元素个数和数组元素的存储单元数。

#include<stdio.h>

int main(void)

{

double a[2],*p,*q;

p=&a[0];

q=p+1;

printf("%d\n",q-p);

printf("%d\n",(int)q-(int)p);

return 0;

}

例8-8  输入一个长度小于80的字符串,按规则对字符串进行压缩,输出压缩后的字符串。压缩规则是:如果某个字符x连续出现n(n1)个,则将这n个字符替换为“nx”的形式;否则保持不变。

#include<stdio.h>

#define MAXLINE 80

void zip(char *p);

int main(void)

{

char line[MAXLINE];

printf("Input the string:");

gets(line);

zip(line);

puts(line);

return 0;

}

void zip(char *p)

{

char *q=p;

int n;

while(*p!='\0')

{

n=1;

while(*p==*(p+n))

{

n++;

}

if(n>=10)

{

*q++=(n/10)+'0';

*q++=(n%10)+'0';

}

else if(n>=2)

{

*q++=n+'0';

}

*q++=*(p+n-1);

p=p+n;

}

*q='\0';

}

例8-9  找最小的字符串。输入n歌字符串,输出其中最小的字符串。

#include<stdio.h>

/*

#include<string.h>

int main(void)

{

int i,n;

char sx[80],smin[80];

scanf("%d",&n);

scanf("%s",sx);

strcpy(smin,sx);

for(i=1;i<n;i++)

{

scanf("%s",sx);

if(strcmp(sx,smin)<0)

{

strcpy(smin,sx);

}

}

printf("min is %s\n",smin);

return 0;

}*/

int main(void)

{

int i,n;

int x,min;

scanf("%d",&n);

scanf("%d",&x);

min=x;

for(i=1;i<n;i++)

{

scanf("%d",&x);

if(x<min)

{

min=x;

}

}

printf("min is %d\n",min);

return 0;

}

例8-10  先输入一个正整数n,再输入任意n个整数,计算并输出这n个整数的和。要求使用动态内存分配方法为这n个整数分配空间。

#include<stdio.h>

#include<stdlib.h>

int main(void)

{

int n,sum,i,*p;

printf("Enter n:");

scanf("%d",&n);

if((p=(int *)calloc(n,sizeof(int)))==NULL)

{

printf("Not able to allocate memory.\n");

exit(1);

}

printf("Enter %d integers:",n);

for(i=0;i<n;i++)

{

scanf("%d",p+i);

}

sum=0;

for(i=0;i<n;i++)

{

sum=sum+*(p+i);

}

printf("The sum is %d\n",sum);

free(p);

return 0;

}

C语言程序设计-笔记7-指针的更多相关文章

  1. 《C语言学习笔记》指针数组及其应用

    C语言中,最灵活但又容易出错的莫过于指针了.而指针数组,是在C中很常见的一个应用.指针数组的意思是说,这个数组存储的所有对象都为指针.除了存储对象为指针,即一个地址外,其它操作和普通数组完全一样. # ...

  2. C语言学习笔记--数组指针和指针数组

    C 语言中的数组有自己特定的类型,数组的类型由元素类型和数组大小共同决定.(如 int array[5]类型为 int[5]) 1.定义数组类型 C 语言中通过 typedef 为数组类型重命名:ty ...

  3. 【C语言学习笔记】指针

    用来存放一个变量地址的变量就叫指针变量.指针变量也是有类型约束的,一般什么类型的指针指向什么类型的变量. 指针之所以叫变量,是因为它里面所存放的变量的地址也是不断变化的,指针是可以移动的. 定义格式: ...

  4. Go语言学习笔记(6)——指针

    指  针 指针: 存储另一个变量的内存地址的变量: Go语言的取地址符号也是& 1. 声明指针: var needle_name *type var b int = 10 var a *int ...

  5. JAVA语言程序设计-笔记摘录

    JAVA 程序语言设计(基础篇) 笔记摘录 为避免输入错误, 不要在nextByte().nextShort().nextInt()等等后面使用nextLine() nextXXXXX()都称为令牌读 ...

  6. C语言程序设计--字符串与指针及数组与指针

    数组的基本知识 数组的定义 #define SIZE 5 int array_int[5]; //未声明初始化,默认填零 float array_float[5] = {1.01, 2.23, 3.1 ...

  7. C语言学习笔记--关于指针的一些小认知

    int main() { int i; char *str = "hu mian yuan"; int length = strlen(str); printf("str ...

  8. Python语言程序设计(笔记)

    1.平方根的格式化 知识点:平方根计算 pow(a,0.5)[可以计算负数,结果为复数] a**b 例题: 获得用户输入的一个整数a,计算a的平方根,保留小数点后3位,并打印输出.‪‬‪‬‪‬‪‬‪‬ ...

  9. C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | IT宅.com

    原文:C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | IT宅.com C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | I ...

  10. Go语言学习笔记九: 指针

    Go语言学习笔记九: 指针 指针的概念是当时学C语言时了解的.Go语言的指针感觉与C语言的没啥不同. 指针定义与使用 指针变量是保存内存地址的变量.其他变量保存的是数值,而指针变量保存的是内存地址.这 ...

随机推荐

  1. 面试官:小伙子知道synchronized的优化过程吗?我:嘚吧嘚吧嘚,面试官:出去!

    写在开头 面试官:小伙子,多线程中锁用过吗? 我:那是自然! 面试官:那你知道synchronized的优化吗? 我:synchronized作为重锁,开销大,在早期不被推荐使用,后期进行了优化,至于 ...

  2. Springboot访问html页面

    项目结构如图 1.html页面创建 在原有的项目resouces目录下创建static包,并在static下创建pages,然后在pages包下index.html. index.html内容 < ...

  3. Ubuntu系统部署springcloud+nacos遇到的问题。

    1,部署上的jar包运行正常,但是通过浏览器不能访问,telnet +IP+端口连接不通.小皮面板访问后台接口也是不通但是小皮面板可以通过浏览器访问.具体问题暂未解决. 2,改用docker部署,将j ...

  4. GIT:斯坦福大学提出应对复杂变换的不变性提升方法 | ICLR 2022

    论文对长尾数据集中的复杂变换不变性进行了研究,发现不变性在很大程度上取决于类别的图片数量,实际上分类器并不能将从大类中学习到的不变性转移到小类中.为此,论文提出了GIT生成模型,从数据集中学习到类无关 ...

  5. CentOS 7 上搭建nginx来部署静态网页

    目录 0. Nginx简介 1. 安装以及使用 1.1 安装和启动 1.2 配置服务器的访问地址 1.3 重启nginx,打开浏览器访问 0. Nginx简介 Nginx (engine x) 是一个 ...

  6. Unit 1 Computer hardware【石家庄铁道大学-专业英语课程复习资料】

    Unit 1 Computer hardware 1.Introduction of computer A computer is a machine that can be instructed t ...

  7. 巴延兴:从主导多个SIG组到OpenHarmony“代码贡献之星”,我是如何做到的?

    编者按:在 OpenHarmony 生态发展过程中,涌现了大批优秀的代码贡献者,本专题旨在表彰贡献.分享经验,文中内容来自嘉宾访谈,不代表 OpenHarmony 工作委员会观点. 巴延兴 深圳开鸿数 ...

  8. 一种基于DeltaE(CIE 1976)的找色算法Cuda实现

    书接上文 一种基于DeltaE(CIE 1976)的找色算法 Delta E 是评估色彩准确度的重要测量指标.摄影师.影片编辑和平面设计师等创意专业人士都应重视这项标准,因其是选择专业级显示器的重要考 ...

  9. 在Mac系统上使用Qt调用摄像头不出图解决方法

    需求:在Mac系统上,调用摄像头,实现旋转.缩放.处理视频帧等功能 问题:使用获取视频帧的方法,在Mac上调不起来摄像头 解决方法: 将视频窗口(QVideoWidget)和视频帧(QVideoFra ...

  10. 使用Python-psycopg访问postgres、openGauss、MogDB

    摘要 Psycopg 是一种用于执行 SQL 语句的 PythonAPI,可以为 PostgreSQL.GaussDB 数据库提供统一访问接口,应用程序可基于它进行数据操作.Psycopg2 是对 l ...