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. 鸿蒙HarmonyOS实战-ArkUI组件(Flex)

    一.Flex 1.概述 Flex布局它可以让容器中的子元素具有弹性伸缩性.Flex布局是一种二维布局模型,它可以在任意方向上对元素进行排列,并且可以动态地调整元素的大小和位置,以适应不同的屏幕尺寸和设 ...

  2. verilog之function

    verilog之function 1.基本作用 function,就是声明一个函数.与task的区别就是有参数.function的返回值就是函数名(可以设置位宽),输入值任意,均作为输入参数.代码块需 ...

  3. 【已解决】java.text.ParseException: Unparseable date

    今天在工作的时候遇到一个问题,我的一个字段queryDate保存不了,总是null值: java.text.ParseException: Unparseable date 报错的原因是日期格式转换错 ...

  4. 第一个hello驱动

    Linux驱动程序的分类 字符设备驱动.块设备驱动和网络设备驱动. Linux驱动程序运行方式 把驱动程序编译进内核里面,这样内核启动后就会自动运行驱动程序了: 把驱动程序编译成以.ko为后缀的模块文 ...

  5. #01背包#洛谷 4161 [SCOI2009]游戏

    题目 将 \(n\) 拆成若干个正整数的和, 问这些正整数的LCM有多少种 \(n\leq 10^3\) 分析 考虑这个\(LCM\)一定是1或者由若干个质数的指数幂相乘得到的, 那么可以设\(dp[ ...

  6. #线性基#LOJ 114 k大异或和

    题目 分析 建出线性基后,但是要求最小所以要重建线性基让大的尽量小, 然后第k小就是拼凑 代码 #include <cstdio> #include <cctype> #inc ...

  7. 黄吉:如何适配OpenHarmony自有音频框架ADM?

    编者按:在 OpenHarmony 生态发展过程中,涌现了大批优秀的代码贡献者,本专题旨在表彰贡献.分享经验,文中内容来自嘉宾访谈,不代表 OpenHarmony 工作委员会观点. 黄吉 中国科学院软 ...

  8. C 语言数组教程:定义、访问、修改、循环遍历及多维数组解析

    C 数组 数组用于将多个值存储在单个变量中,而不是为每个值声明单独的变量. 要创建数组,请定义数据类型(例如 int)并指定数组名称,后面跟着方括号 []. 要将值插入其中,请使用逗号分隔的列表,并在 ...

  9. Python 数组和列表:创建、访问、添加和删除数组元素

    Python 没有内置支持数组,但可以使用 Python 列表来代替. 数组 本页将向您展示如何使用列表作为数组,但要在 Python 中使用数组,您需要导入一个库,比如 NumPy 库.数组用于在一 ...

  10. Seaborn结构化图形绘制(FacetGrid)

    结构化图形绘制(FacetGrid) 可实现多行多列个性化绘制图形. sns.FacetGrid( data, row=None, col=None, hue=None, col_wrap=None, ...