c语言基础案例之指针




#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void) {
//定义整型数组长度为10,分别用指针和数组名访问数组中的元素。
//数组名访问
/*int arr[10];
int i;
printf("请输入10个整数:\n");
fflush(stdout);
for(i=0;i<10;i++){
scanf("%d",&arr[i]);
}
printf("通过数组名访问到的数组元素为::\n");
for(i=0;i<10;i++){
printf("%d ",arr[i]);
}*/


//指针访问数组
/*int arr[10];
int i;
int *p=arr;
printf("请输入10个整数:\n");
fflush(stdout);
for(i=0;i<10;i++){
scanf("%d",p++);
}
p=arr;
printf("通过指针访问到的数组元素为::\n");
for(i=0;i<10;i++,p++){
printf("%d ",*p);
}*/


//输入a,b,c三个整数,按先大后小的顺序输出。
//方法一应用if,输出应用整形变量
/*int a, b, c, temp;
printf("请输入3个整数:\n");
fflush(stdout);
scanf("%d%d%d", &a, &b, &c);
if (a < b) {
temp = a;
a = b;
b = temp;
}
if (a < c) {
temp = a;
a = c;
c = temp;
}
if (b < c) {
temp = b;
b = c;
c = temp;
}
printf("按从大到小的顺序为:\n");
printf("%d %d %d\n",a,b,c);*/


//方法二应用if,输出通过指针变量
/*int *p1, *p2, *p3, *p, a, b, c;
printf("请输入3个整数:\n");
fflush(stdout);
scanf("%d%d%d", &a, &b, &c);
p1 = &a;
p2 = &b;
p3 = &c;
if (a < b) {
p = p1;
p1 = p2;
p2 = p;
}
if (a < c) {
p = p1;
p1 = p3;
p3 = p;
}
if (b < c) {
p = p2;
p2 = p3;
p3 = p;
}
printf("按从大到小的顺序为:\n");
printf("%d %d %d\n", *p1, *p2, *p3);*/


//方法三通过调用函数
/*int main() {
void jiaohuan(int *p1, int *p2, int *p3);
int a, b, c, *p1, *p2, *p3;
printf("请输入3个整数:\n");
fflush(stdout);
scanf("%d%d%d", &a, &b, &c);
p1 = &a;
p2 = &b;
p3 = &c;
jiaohuan(p1, p2, p3);
printf("按从大到小的顺序为:\n");
printf("%d %d %d\n", *p1, *p2, *p3);
return 0;
}
void jiaohuan(int *p1, int *p2, int *p3) {
void swap(int *t1, int *t2);
if (*p1 < *p2)
swap(p1, p2);
if (*p1 < *p3)
swap(p1, p3);
if (*p2 < *p3)
swap(p2, p3);
}
void swap(int *t1, int *t2) {
int temp;
temp = *t1;
*t1 = *t2;
*t2 = temp;
}*/


//指数下列是否正确,若不正确,说明并改正
/*int a=0;
int *p;
*p=&a;//改为:p=&a;
printf("%x\n",p);*/
/*int  a=10;
char *p;
p=&a;
printf("%x\n",p);*/
/*int *p,a=10;
*p=a;
printf("%d\n",*p);*/


//编写一程序,将两个字符串连接起来,s1接在s2的后面。
//方法一:应用strcat函数


    char str1[100]="world!";
char str2[100]="hello ";
char *s1;
char *s2;
s1=str1;
s2=str2;
strcat(s2,s1);
printf("s1接在s2的后面为:\n%s",s2);
//方法二:不应用strcat函数
/*void func(char *t,char *s){
while(*t){
t++;
}
while(*s){
*t=*s;
t++;
s++;
}
*t='\0';
}
int main(){
char str2[100]="hello ";
char str1[100]="world!";
func(str2,str1);
printf("s1接在s2的后面为:\n%s",str2);


return 0;
}*/


//完成下列任务:
//(1)从键盘接受一个字符串。
//(2)定义指针变量,通过指针变量访问字符串,并输出。
//(3)输出指针变量。
/*char str[100];
printf("请输入一个字符串:\n");
fflush(stdout);
scanf("%s",str);
printf("输入的字符串为:\n%s\n",str);
char *p;
p=str;
printf("通过指针变量p访问字符串为:\n%s\n",p);
printf("指针变量为:\n%s\n",str);*/


//完成下列任务:
//(1)定义一个字符型变量
//(2)定义一个void型的指针变量
//(3)通过指针变量访问字符型变量
//(4)输出指针变量的值,输出指针变量
/*char str[100]={"hello world!"};
void *p;
p=str;
printf("指针变量p的值为:\n%s\n",(char*)p);*/


//完成下列任务:
//(1)定义整形变量a,
//(2)定义指针变量p,
//(3)定义一个指针的指针p1,用于指向指针p,
//(4)分别输出a,p,p1,
//(5)分别输出*p,*p1。
/*int a=1;
int *p;
int **p1;
p=&a;
p1=&*p;
printf("a=%x\np=%x\np1=%x\n",a,p,p1);
printf("*p=%d\n*p1=%d\n",*p,*p1);*/


//完成下列任务:
//(1)定义整型数组,数组长度10;定义指针变量并指向整型数组,
//(2)求指针变量的字节,并输出
//(3)指针变量加2后再输出指针变量的值和地址,
//(4)定义两个指针p和p1,分别指向数组中第一个元素和第五个元素,两指针做减法运算,输出运算结果。
//(5)指针p和p1进行比较,并输出比较后的值。
/*int a[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };
int *b = a;
printf("指针变量b的字节为:\n%d\n", sizeof(b));
printf("指针变量的值为:\n%d\n指针变量的地址为:\n%x\n", *b += 2, b + 2);
int *p;
int *p1;
p = &a[0];
p1 = &a[4];
printf("两指针做减法运算的结果为:\n%d\n", p1 - p);
printf("指针p和p1进行比较后的值为:\n%d", strcmp(p, p1));*/


//定义一个double类型的指针head,并初始化为NULL。
/*double *head = NULL;
//定义一个double类型的变量salary,并初始化为8000.75,让head指向salary。
double salary = 8000.75;
head = &salary;
//使用&显示变量salary所占内存的地址值。
printf("变量salary所占内存的地址值为:%x\n", &salary);
//使用head显示salary所占内存的地址值
printf("变量salary所占内存的地址值为:%x\n", head);
//分别通过salary本身和head显示变量salary的值
printf("变量salary为:%lf\n", salary);
printf("变量salary为:%lf\n", head);
//定义一个double类型的指针tail,并初始化为NULL。
double *tail = NULL;
//通过赋值的方式,让tail也指向salary,要求使用指针间赋值完成操作。
tail = head;
printf("%lf\n", tail);
//通过tail显示所指变量的值。
printf("tail=%lf\n", *tail);
//通过tail修改salary的值为3023.25。
*tail = 3023.25;
//通过head显示所指变量的值
printf("head=%lf\n", *head);
//定义一个int类型的变量age,初始化为28
int age = 28;
//将age的地址赋值给head,即使head重新指向age,查看执行结果。
head = &age;
printf("head=%d\n", *head);
//通过tail将变量salary的值加100
*tail = *tail + 100;
printf("tail=%lf\n", *tail);
//使用salary显示变量的值
printf("salary=%lf\n", salary);
//使用sizeof显示head、tail、salary的大小。
printf("sizeof (int head) = %d\n", sizeof(head));
printf("sizeof (int tail) = %d\n", sizeof(tail));
printf("sizeof (int salary) = %d\n", sizeof(salary));*/


//定义所有基本数据类型的变量并初始化变量的值,然后定义所有基本数据类型的指针并使用指针
//输出各变量的值;再使用指针改变各变量的值,使用变量重新输出。
/* int a = 2;
double b = 3.00;
float c = 4.0;
int *aa;
double *bb;
float *cc;
aa = &a;
bb = &b;
cc = &c;
printf("int变量的值为:%d\n", *aa);
printf("double变量的值为:%lf\n", *bb);
printf("float变量的值为:%f\n", *cc);
*aa = 5;
*bb = 6.00;
*cc = 7.0;
printf("指针改变int变量的值为:%d\n", *aa);
printf("指针改变double变量的值为:%lf\n", *bb);
printf("指针改变float变量的值为:%f\n", *cc);*/
return EXIT_SUCCESS;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值