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. KingbaseES 临时表

    临时表在数据库管理和数据处理中有着广泛的应用,主要用于存储临时数据或进行中间计算.临时表中的数据对会话是私有的,每个会话只能看到和修改自己会话的数据. KingbaseES支持本地临时表和全局临时表. ...

  2. kingbaseES坏块修复功能

    1.自动坏块修复简介 主数据库访问系统表数据.索引.持久化用户表数据.索引时,从磁盘读取数据块至共享缓冲区,如果检测到坏块,自动从备节点获取坏块的副本,并修复坏块. 坏块修复相关参数 参数名称 默认值 ...

  3. #背包#洛谷 4026 [SHOI2008]循环的债务

    题目 分析 设\(dp[t][n][m]\)表示前\(t\)种钞票\(\text{Alice,Bob}\)分别拥有\(n,m\)元所需最小交换钞票数, 枚举\(\text{Alice,Bob}\)最后 ...

  4. 本周二晚19:00战码先锋第5期直播丨深入理解OpenHarmony系统启动,轻松踏上设备软件开发之旅

    OpenAtom OpenHarmony(以下简称"OpenHarmony")工作委员会首度发起「OpenHarmony开源贡献者计划」,旨在鼓励开发者参与OpenHarmony开 ...

  5. Go 语言输出文本函数详解

    Go语言拥有三个用于输出文本的函数: Print() Println() Printf() Print() 函数以其默认格式打印其参数. 示例 打印 i 和 j 的值: package main im ...

  6. Excel分析师的工资能一直飙升,原因其实是...

    世界上的数据分析师分为使用Excel的分析师和其他分析师两类. 即使在互联网数据分析界,java遍街头,Python不如狗,Excel也是不可替代的. 上班前以为自己是西装笔挺的Excel数据分析师, ...

  7. 千字干货分享:一文教你ABI增强分析,BI的未来就在这里!

    自2017年以来,智能概念开始出现,各类商业智能BI应用的使用门槛逐渐降低,商业智能BI制造商主要竞争增强分析的能力.<2020年Gartner分析与BI平台魔法象限报告>指出,2020年 ...

  8. JavaScript 迈入 AI 新纪元

    随着人工智能技术的不断进步,JavaScript 也迎来了自己的 AI 时代. JS-Torch 是一个全新的深度学习库,专为 JavaScript 设计,其语法习惯与广受欢迎的 PyTorch 框架 ...

  9. 重新点亮shell————awk函数[十五]

    前言 简单介绍一下awk函数. 正文 算术函数 字符串函数 自定义函数 例子: 结 awk就到这里了.

  10. sql 语句系列(字符串之父与子之间)[八百章之第十二章]

    前言 介绍字符串和其子字符串直接的使用. 判断含有子字母的字符串 select * from emp 在mysql中: select emp.ename from emp where emp.enam ...