课程2

本文通过多个示例讲解了C语言中指针的基本使用方法,包括指针与数组的关系、指针运算、数组元素的逆序排列及多维数组的处理等。同时,也讨论了指针的一些潜在风险。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//指针
/*
#include<stdio.h>
void main()
{
    int a;
    int *pa=&a;
    a=10;
    printf("%d %d %d %d %d \n",a,*pa,&a,pa,&pa);
}
*/

//交换指针变量的值
//例子:输入三个数,按从大到小输出,地址传递
/*
#include<stdio.h>
void cmp(int *p1,int *p2);
void main()
{
    int a,b,c;
    int *point_1,*point_2,*point_3;
    scanf("%d %d %d",&a,&b,&c);
    point_1=&a;
    point_2=&b;
    point_3=&c;
    cmp(point_1,point_2);
    cmp(point_1,point_3);
    cmp(point_2,point_3);
    printf("%d %d %d ",a,b,c);
}
void cmp(int *p1,int *p2)
{
    int p;
    if(*p1<*p2)
    {p=*p1; *p1=*p2; *p2=p; }
}
*/

//指针变量的运算
/*
#include<stdio.h>
void main()
{
    int a[]={5,8,7,6,2,7,3};
    int y,*p=&a[1];
    y=(*--p)++;            //先运算(*--p)=a[0] 输出y=5 运算之后a[0]++,即5++ a[0]=6
    printf("%d ",y);    // y=5
    printf("%d ",a[0]); //a[0]=6
}
*/

//注意指针的当前值 数组越界,指针变量可以指到数字后的内存单元,会输出乱码
/*
#include<stdio.h>
void main()
{
    int i,*p,a[7];
    p=a;
    for(i=0;i<7;i++)
        scanf("%d",p++);
        printf("\n");
   //p=a; //加此行修改
    for(i=0;i<7;i++,p++)
        printf("%d ",*p);
}
*/

//将数组a中的n个整数按相反顺序存放  answer1 实参与形参均用数组名
/*    
#include<stdio.h>
void inv(int  x[], int n)
{   int t,i,j,m=(n-1)/2;
    for(i=0;i<=m;i++)
    {    j=n-1-i;
     t=x[i];  x[i]=x[j];  x[j]=t;
    }
}
void main()
{   int i,a[10]={3,7,9,11,0,6,7,5,4,2};
     inv(a,10);
    printf("The array has been reverted:\n");
    for(i=0;i<10;i++)
       printf("%d,",a[i]);
    printf("\n");
}
*/

//例  3个学生各学4门课,查找一门以上课程不及格学生, 输出其各门课程的成绩
/*
#include<stdio.h>
void search(float  (*p)[4],int  n);
void main( )
{float score[3][4]={{65,55,79,60},{80,87,90,81},{50,99,100,98}};
   search(score,3);
}
void search(float  (*p)[4], int  n)
{   int i,j,flag;
    for(j=0;j<n;j++)
    {   flag=0;
    for(i=0;i<4;i++)
      if(*(*(p+j)+i)<60)  flag=1;
    if(flag==1)
    {   printf("No.%d is fail,his scores are:\n",j+1);
        for(i=0;i<4;i++)
        printf("%5.1f ",*(*(p+j)+i));
        printf("\n");
    }
    }
}
*/
//危险!!!!   不能把形参或局部变量的地址作函数返回值

/*
#include<stdio.h>
int *f1(int x,int y)
{
    if(x>y)
    return  &x;
    else
    return  &y;
}

void main()
{   int a=2,b=3;
    int *p;
    p=f1(a, b);
    printf("%d\n",*p);
}
*/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值