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. C++正则表达式 <regex>

    一 简介 概括而言,使用正则表达式处理字符串的流程包括: 用正则表达式定义要匹配的字符串的规则, 然后对目标字符串进行匹配, 最后对匹配到的结果进行操作. C++ 的 regex 库提供了用于表示正则 ...

  2. LOTO示波器选型指南

    LOTO示波器选型指南 LOTO示波器属于虚拟示波器,产品主要基于USB接口的,所以使用LOTO示波器产品需要配备一台Windows电脑或者Android(安卓)智能手机/平板. 针对一些特殊应用的工 ...

  3. 【IOT安全】ASA5520基本知识和配置

    本文主要介绍ASA5520防火墙的基本知识和配置 环境搭建 Linux eveng 5.17.8-eve-ng-uksm-wg+ #1 SMP PREEMPT Mon May 16 10:08:59 ...

  4. Oracle 字符串拆分成一个一个字符

    SELECT (REGEXP_SUBSTR('LW112190', '[A-Z0-9]', 1, ROWNUM)) test FROM DUAL CONNECT BY ROWNUM <= LEN ...

  5. python [pymysql] 操作MySQL数据库

    python [pymysql] 操作MySQL数据库 连接.关闭数据库 def get_conn_(): """ :return: 连接,游标 "" ...

  6. 测试开发之网络篇-OSI七层协议

    今天,我们来了解一下OSI(Open System Interconnect)开放式系统互连.它是ISO组织在1985年发布的网络互连模型,该标准定义了网络互连的七层框架.其内容简述如下: 我们办公室 ...

  7. #排序,去重#洛谷 5682 [CSPJX2019]次大值

    题目 分析 首先,显然要排序去重,考虑最大值应该是\(a_{n-1}\)(排序后) 那次大值只有可能出现在\(a_{n-2}\)或者\(a_n\bmod a_{n-1}\)中 当然去重后如果只有一个数 ...

  8. 报名启动|OpenHarmony源码转换器—多线程特性转换赛题

  9. Go 语言学习:了解 const 关键字及常量声明

    如果一个变量应该有一个固定的.不能改变的值,你可以使用const关键字. const关键字将变量声明为"常量",这意味着它是不可改变和只读的. 语法 const CONSTNAME ...

  10. Python 布尔类型

    布尔值表示两个值之一:True(真)或False(假). 布尔值 在编程中,您经常需要知道一个表达式是否为True或False. 您可以在Python中评估任何表达式,并获得两个答案之一:True或F ...