C语言---指针复习

指针基本概念

(1)指针就是地址,指针变量存放地址
(2)通过变量名直接存取值为直接访问,通过该地址获得值为间接访问
(3)怎么样定义指针变量
int *p1,*p2;
(4)给指针变量赋值
int a;
int *p;
p = &a;//将a的地址赋值给变量p


(5)怎么样引用指针变量
带类型语句,称为定义语句
指针变量定义语句以外的语句:
##不带*号表示地址

##带*号,表示对应地址的值
(6)指针变量作为函数参数
传址与传值的区别

#include <stdio.h> 
void f(int *p,int n){
    *p = 1998;//传址:被调用函数中改变地址中的值,也改变实参的值
    n = 99;//传值:被调用函数中改变形参的值,不影响实参的值 
}

int main()
{
    int a = 10,b=20;
    f(&a,b);
    printf("%d %d\n",a,b); 
    return 0;
}

 指针与数组

 数组名也是指针,是第一个元素的地址

#include <stdio.h>
int main()
{  
    int a[5]={5,6,4,3,9};
    printf("第一个元素的地址%d\n",a);
    printf("第一个元素的地址%d\n",&a[0]);
    printf("第二个元素的地址%d\n",a+1);
    printf("第二个元素的地址%d\n",&a[1]);
    return 0; 
}

通过指针引用数组

#include <stdio.h> 
int main()
{
    int a[4]={1,2,3,4};
    int *p;
    p = a;
    printf("%d\n",a[1]);
    printf("%d\n",*(p+1));
    printf("%d\n",*(a+1)); 
    return 0;
}

用指针写的插入排序

void sort(int *a,int n){
    int i,j;
    for(i=1;i<n;i++){
        if(*(a+i)<*(a+i-1)){
            int temp = *(a+i);
            for(j=i-1;j>=0&&temp<*(a+j);j--){
                *(a+j+1) = *(a+j);
            }
            *(a+j+1) = temp;
        }
    }
}

指针与字符串

字符指针变量和字符数组用法是有区别的

#include <stdio.h>
int main()
{
    char *String;//char* String="I love you baby";
    String="I love you baby";//字符指针变量存放的字符串第一个字符的地址
    printf("%s\n",String);
    return 0;
}

但是字符数组不可以这样用.

二维数组和指针

#include <stdio.h>
int main()
{
    int a[2][3]={{1,2,3},{4,5,6}};
    int i,j;
    int *p;p = a;
    for(i=0;i<2;i++){
        for(j=0;j<3;j++){
            printf("%d\t",*(p+i*3+j));
        }
        printf("\n");
    }
    printf("%d\n",p[4]);
    return 0;
}

 

posted @ 2018-07-23 09:43  leonard丶zou  阅读(148)  评论(0编辑  收藏  举报