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. Gaussian YOLOv3 : 对bbox预测值进行高斯建模输出不确定性,效果拔群 | ICCV 2019

    在自动驾驶中,检测模型的速度和准确率都很重要,出于这个原因,论文提出Gaussian YOLOv3.该算法在保持实时性的情况下,通过高斯建模.损失函数重建来学习bbox预测值的不确定性,从而提高准确率 ...

  2. Hadoop_08 Hadoop重装

    今日总结: 由于之前配置存在问题,今天学到后面之后发现很多bug,需要全部卸载重新配置Hadoop.ZooKeeper以及Hbase.

  3. #dp,排列#LOJ 2743「JOI Open 2016」摩天大楼

    题目 将互不相同的 \(n\) 个数重排,使得相邻两数差的总和不超过 \(L\) 的有多少种方式. \(n\leq 100,L\leq 1000\) 分析 对于排列的问题,有一种很妙的方法就是从小到大 ...

  4. #RMQ,动态开点线段树#CF803G Periodic RMQ Problem

    题目 给定\(n\)个数,将这个数列复制\(k\)次得到数列\(a\), 对\(a\)满足区间赋值操作和区间最小值询问 \(n\leq 10^5,q\leq 10^5,k\leq 10^4即|a|\l ...

  5. #区间dp#CF1114D Flood Fill

    题目 有一个长度为\(n\)的颜色序列,在游戏前选择一个固定的位置, 若当前轮该位置的颜色为\(x\),那么可以将所有颜色为\(x\)的连通块改为任意颜色, 问最少进行多少轮使得区间\([1,n]\) ...

  6. Docker学习路线2:底层技术

    了解驱动Docker的核心技术将让您更深入地了解Docker的工作原理,并有助于您更有效地使用该平台. Linux容器(LXC) Linux容器(LXC)是Docker的基础. LXC是一种轻量级的虚 ...

  7. dev DEV控件:gridControl常用属性设置

    引用:https://www.cnblogs.com/kingsliu/articles/6145679.html 1.隐藏最上面的GroupPanelgridView1.OptionsView.Sh ...

  8. 品质影音体验,畅享娱乐生活丨HMS Core.Sparkle影音娱乐创新线上沙龙报名启动

    从全民娱乐到全民创作,音视频.直播已成为文娱市场中最为活跃的内容形态,用户在享受视听娱乐的同时,也更期待通过这些平台来表达自己. 面对用户个性化需求的增加,影音娱乐应用开发者和内容平台,该如何通过技术 ...

  9. Qt操作sqlite数据库

    代码讲解: 1.检查数据库文件是否存在,如果不存在就创建数据库文件 2.创建 person 表(等下的操作就是操作这个表) 3.查询出 person 表中所有的数据,并显示出来 Pro 文件 添加 S ...

  10. node excel采集数据

    前言 个人写过无数的脚本,但是一直没有整理,后续整理脚本. 需求: 生成一堆激活码. 业务: 需要拿到一个token, 然后调用某个api获取激活码. 正文 思路: 1.http请求 axios 2. ...