C语言程序设计-笔记7-指针
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-指针的更多相关文章
- 《C语言学习笔记》指针数组及其应用
C语言中,最灵活但又容易出错的莫过于指针了.而指针数组,是在C中很常见的一个应用.指针数组的意思是说,这个数组存储的所有对象都为指针.除了存储对象为指针,即一个地址外,其它操作和普通数组完全一样. # ...
- C语言学习笔记--数组指针和指针数组
C 语言中的数组有自己特定的类型,数组的类型由元素类型和数组大小共同决定.(如 int array[5]类型为 int[5]) 1.定义数组类型 C 语言中通过 typedef 为数组类型重命名:ty ...
- 【C语言学习笔记】指针
用来存放一个变量地址的变量就叫指针变量.指针变量也是有类型约束的,一般什么类型的指针指向什么类型的变量. 指针之所以叫变量,是因为它里面所存放的变量的地址也是不断变化的,指针是可以移动的. 定义格式: ...
- Go语言学习笔记(6)——指针
指 针 指针: 存储另一个变量的内存地址的变量: Go语言的取地址符号也是& 1. 声明指针: var needle_name *type var b int = 10 var a *int ...
- JAVA语言程序设计-笔记摘录
JAVA 程序语言设计(基础篇) 笔记摘录 为避免输入错误, 不要在nextByte().nextShort().nextInt()等等后面使用nextLine() nextXXXXX()都称为令牌读 ...
- C语言程序设计--字符串与指针及数组与指针
数组的基本知识 数组的定义 #define SIZE 5 int array_int[5]; //未声明初始化,默认填零 float array_float[5] = {1.01, 2.23, 3.1 ...
- C语言学习笔记--关于指针的一些小认知
int main() { int i; char *str = "hu mian yuan"; int length = strlen(str); printf("str ...
- Python语言程序设计(笔记)
1.平方根的格式化 知识点:平方根计算 pow(a,0.5)[可以计算负数,结果为复数] a**b 例题: 获得用户输入的一个整数a,计算a的平方根,保留小数点后3位,并打印输出. ...
- C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | IT宅.com
原文:C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | IT宅.com C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | I ...
- Go语言学习笔记九: 指针
Go语言学习笔记九: 指针 指针的概念是当时学C语言时了解的.Go语言的指针感觉与C语言的没啥不同. 指针定义与使用 指针变量是保存内存地址的变量.其他变量保存的是数值,而指针变量保存的是内存地址.这 ...
随机推荐
- SpringBoot3集成PostgreSQL
标签:PostgreSQL.Druid.Mybatis.Plus: 一.简介 PostgreSQL是一个功能强大的开源数据库系统,具有可靠性.稳定性.数据一致性等特点,且可以运行在所有主流操作系统上, ...
- Jvm之用C#解析class文件
项目地址 GitHub - lxw112190/JavaClassReader: C# JavaClassReader 项目结构 一个简单的测试类 public class Test { Intege ...
- 运维排查 | Systemd 之服务停止后状态为 failed
哈喽大家好,我是咸鱼. 我们知道 CentOS 7 之后,Systemd 代替了原来的 SystemV 来管理服务,相比 SystemV ,Systemd 能够很好地解决各个服务间的依赖关系,还能让所 ...
- #树形依赖背包,点分治#BZOJ 4182 Shopping
题目 给定一棵大小为 \(n\) 的树,每个点代表一种物品,其具有体积.价值和数量的属性, 现在选择一个连通块,使得里面所有点都被选中且体积不超过 \(m\),问最大价值. \(n\leq 500,m ...
- SSL新年欢乐赛暨BPM退役赛(不含FK)
目录 前言 C 大水题 题目 分析 代码 D 简单数据结构题 题目 分析 代码 H 上次题 题目 分析 代码 J 白给题 题目 分析 代码 前言 A,B水题,E,I原题 实际赛时400分(乐多毁我青春 ...
- #线段树分治,背包#CF601E A Museum Robbery
题目 有 \(n\) 个展品正在被展览,每一个展品都有一价值 \(v\) 个和一个混乱度 \(w\) ,现在有 \(m\) 次操作: 1 \(v\) \(w\) :加入一个新的展品,价值为\(v\), ...
- #dp#洛谷 6855 「EZEC-4.5」走方格
题目 分析 考虑每个格子\((i,j)\)获得的得分即为经过这个格子与不经过这个格子的答案 预处理出起点到每个点的最小得分和每个点到终点的最小得分, 那么经过这个格子的答案很好求,问题是不经过这个格子 ...
- OpenHarmony 3.2 Release新特性解读之驱动HCS
OpenAtom OpenHarmony(以下简称"OpenHarmony")开源社区,在今年4月正式发布了OpenHarmony 3.2 Release版本,标准系统能力进一 ...
- OpenHarmony社区运营报告(2022年11月)
本月快讯 • 11月24日,第二十届中日韩三国IT局长OSS会议暨东北亚开源软件推进论坛以在线形式成功召开.经审核评选认定,OpenAtom OpenHarmony(以下简称"OpenHar ...
- 共筑使能千行百业的数字底座 | HDC 2022松湖对话顺利召开
11月5日,华为开发者大会2022松湖对话在东莞松山湖凯悦酒店召开,开放原子开源基金会秘书长冯冠霖.华为终端BG软件部总裁龚体.深圳国家金融科技测评中心董事长钟剑.鸿湖万联(江苏)科技发展有限公司董 ...