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语言的没啥不同. 指针定义与使用 指针变量是保存内存地址的变量.其他变量保存的是数值,而指针变量保存的是内存地址.这 ...
随机推荐
- MySQL函数GROUP_CONCAT()函数简介
一.数据需求按id分组然后把name用英文逗号分隔开 id name countryid age 1 曹操 1 56 2 刘备 2 47 3 孙权 3 38 4 司马懿 1 61 5 诸葛亮 2 42 ...
- IDEA (任意 JetBrains IDE)拆分先前 commit
最近在合并上游代码,遇到了一个问题:某个 commit 杂糅了几个不同的特性修改,这可能会导致 rebase 上游代码时需要再对该 commit 进行额外的代码冲突处理 解决方法:合并上游分支前,拆分 ...
- C# URL参数编码
string s = "lw123abc测试信息!@#¥%--&*()--+"; Console.WriteLine("原数据:\t\t" + s); ...
- Python数据库编程全指南SQLite和MySQL实践
本文分享自华为云社区<Python数据库编程全指南SQLite和MySQL实践>,作者: 柠檬味拥抱. 1. 安装必要的库 首先,我们需要安装Python的数据库驱动程序,以便与SQLit ...
- AABO:自适应Anchor设置优化,性能榨取的最后一步 | ECCV 2020 Spotlight
论文提出超参数优化方法AABO,该方法核心基于贝叶斯优化和Sub-Sample方法,能够自适应的搜索最优的anchor设置.从实验结果来看,AABO能够仅通过anchor设置优化,为SOTA目标检测方 ...
- SQLSERVER 的表分区(水平) 操作记录2
1 ----(非原创只是自己整理记录!!!)---------------原文地址: https://www.cnblogs.com/libingql/category/184251.h ...
- ET介绍——数值组件设计
类似魔兽世界,moba这种技能极其复杂,灵活性要求极高的技能系统,必须需要一套及其灵活的数值结构来搭配.数值结构设计好了,实现技能系统就会非常简单,否则就是一场灾难.比如魔兽世界,一个人物的数值属性非 ...
- 学习Source Generators之输出生成的文件
上一篇文章学习了通过获取和解析swagger.json的内容,来生成API的请求响应类. 但是其中无法移动与编辑. 那么本文将介绍如何输出生成的文件. EmitCompilerGeneratedFil ...
- PriorityQueue和PriorityBlockingQueue
目录 简介 PriorityQueue PriorityBlockingQueue PriorityQueue和PriorityBlockingQueue 简介 Queue一般来说都是FIFO的,当然 ...
- 小师妹学JavaIO之:文件写入那些事
目录 简介 字符输出和字节输出 格式化输出 输出其他对象 在特定的位置写入 给文件加锁 总结 简介 小师妹又对F师兄提了一大堆奇奇怪怪的需求,要格式化输出,要特定的编码输出,要自己定位输出,什么?还要 ...