c语言 指针

指针:c语言的一种高级数据类型,指针的数据类型变量是用来存放其他变量的内存地址,达到间接访问另一个变量的目的;更加方便对数组和字符串的操作;以及函数调用中相互传递数据

一:变量的指针

#include<stdio.h>
int main()
{
    int a,b,t,* p1,* p2,* p;
    p1 = &a;
    p2 = &b;
//指针的读取,p1直接指向地址 
    scanf("%d",p1);
    printf("a=%d,a=%d
",a,* p1); 

//利用指针进行运算 
    b = 5;
    * p2= * p2 +  5;
    
    printf("b=%d,b=%d
",b,* p2);
    
// 利用指针进行替换操作
    p = p1; p1 = p2; p2 = p;
    
    printf("a=%d,b=%d
",* p1,* p2);
         
    return 0;
}

二:数组指针

①一维数组

#include<stdio.h>
#define N 5

int main()
{
    int a[N],* p,i; 
    int sum=0;
    float aver;
    p = a;

//利用指针计算求和 
    for(i=0;i<N;i++){
        scanf("%d",p+i);
        sum += * (p+i);
    }

    aver = sum*1.0 /N;
    
//利用循环找大于平均值    
    for(i=0;i<N;i++){
        if(* (p+i) > aver){
            printf("%d bigger than aver
",* (p+i));
        }
    } 

        return 0;
}

②二维数组

(1)通过列指针操作数组

#include<stdio.h>

//采用列的方式处理二维指针 
int main()
{
    int i,j,a[2][3] = {{1,3,5},{2,4,6}},* p;
    p = &a[0][0];
    
    for(i=0;i<6;i++){
        printf("%d",*p++);
    }
    printf("
");
    
    p = &a[0][0];

//当a[0][2]时,p+1将会指向第二行,即a[2][0] 
    for(i=0;i<2;i++){
        for(j=0;j<3;j++){
            printf("%d",*p+i*3+j);
        }
        printf("
");
    } 
    
    return 0;
 } 

(2)通过行指针操作数据

#include<stdio.h>

//采用行的方式处理二维指针 
int main()
{
    int i,j,a[2][3] = {{1,3,5},{2,4,6}};
//在使用行指针的时候,必须指定每一行的元素个数,例如指定每行为3个元素    
    int (* p)[3];
    p = a;

    for(i=0;i<2;i++){
        for(j=0;j<3;j++){
            printf("%d",*(*(p+i)+j));
        }
        printf("
");
    } 
    
    return 0;
 } 

三:字符串指针

①字符串数组

#include<stdio.h>

int main()
{
    char * s;
    s = "I love China!"; 
    
    printf("%s
",s); 

    return 0;
}

②字符串的大小比较

#include<stdio.h>
#include<string.h>

int main()
{
    const char *s1="aaa",*s2="bbb",*s3="ccc",*s;
    
    if (strcmp(s1,s2)<0){
        s = s1;
        s1 = s2;
        s2 = s;
    }
    
        if (strcmp(s1,s3)<0){
        s = s1;
        s1 = s3;
        s3 = s;
    }
    
        if (strcmp(s2,s3)<0){
        s = s2;
        s2 = s3;
        s3 = s;
    }
    
    puts(s1);
    puts(s2);
    puts(s3);
    
    return 0;
}

③字符串的复制

#include<stdio.h>
#include<string.h>

int main()
{
    char a[10],b[10],*s1,*s2;
    
    s1 = a;
    s2 = b;
    
    gets(a);
    
    while(*s1){
        * s2 = * s1;
        s2++;
        s1++;
    }
    
    *s2 = '';
    
    puts(a);
    puts(b);
    
    return 0;
}

④字符串的拼接

#include<stdio.h>
#include<string.h>

int main()
{
    char a[10],b[10],*s1,*s2;
    
    s1 = a;
    s2 = b;
    
    gets(a);
    gets(b);

    while(*s1) s1++;
    while(*s1++ = *s2++);
    
    puts(a);
    puts(b);
    
    
    
    return 0;
}
非学无以广才,非志无以成学。 正是因为今天的不完美,才对未来充满希望。 ----长帆
原文地址:https://www.cnblogs.com/changfan/p/11660870.html