C指针和二级指针 数组 冒泡排序

案列:

int main(){
    int i = 10;
    int *p;
    p =&i;
    printf("%d\n", *p);
    printf("p 地址: %#x  \n", &p);
    printf("i 地址: %#x  \n", &i);
    i = 20;
    printf("%d\n", *p);
    printf("p 地址: %#x  \n", &p);
    printf("i 地址: %#x  \n", &i);
    printf("sizeof(*p) %d \n",sizeof(*p));


    double f = 23.00;
    double *fp;
    //fp=(double *)ox0000可以强转地址
    fp = &f;
    printf("f的内存 %d \n", sizeof(f));
    //fp 是一个变量  指向double 类型的数据的变量
    //fp 存储的地址,地址在本系统就是占用4字节、
    //指针变量存储的是地址,所以它的大小不受赋值的变量影响
    printf("sizeof(fp) %d \n", sizeof(fp));

    printf("f 地址: %#x  \n", &f);
    printf("fp 地址: %#x  \n", &fp);

    printf("f的值 %lf \n", f);
    printf("fp的值 %lf \n", *fp);
    *fp = 100.23;
    printf("f的值 %lf \n", f);
    printf("fp的值 %lf \n", *fp);

    system("pause");
    return 0;
}

总结:C++ 完全兼容C;指针(Pointer)是编程语言中的一个对象,利用地址,它的值直接指向(points to)存在电脑存储器中另一个地方的值。由于通过地址能找到所需的变量单元,可以说,地址指向该变量单元。因此,将地址形象化的称为“指针”。意思是通过它能找到以它为地址的内存单元。由于程序语言对变量的定义有多种类型,因此指针也就还要分类。

int main(){

    //int a = 1;
    ////自定义头文件可以通过“” 引用
    //fun(a);
    int  b = 10;
    int *p;
    p = &b;
    *p = *p + 10;
    printf("b=%d,*p=%d \n", b, *p);
    int y = 3 + *p;
    printf("y:%d\n", y);
    *p += 1;
    printf("b=%d,*p=%d\n", b, *p);

    (*p)++;
    printf("b=  %d ,*p=  %d ,p address:  %#x\n", b, *p, p);
    //p++指的*p的下一个地址,不知道系统存储的什么数值
    //,在不知道的情况下不要使用,很容易导致崩溃
    *p++;
    printf("b= %d ,*p= %d ,p address: %#x\n", b, *p, p);
    *p = *p + 10;
    printf("b=  %d ,*p=  %d ,p address:  %#x\n", b, *p, p);

    system("pause");
    return 0;
}

扫描二维码关注公众号,回复: 2404616 查看本文章

=========数组=====

int main(){
    //数组名就是数组的首地址
    int a[5];
    int *p = a;
    p = a;
    int i;
    printf("%#x\n", a);
    //a+5 表示啊移动到数组第5个位置
    /*for (i = 0; p < a + 5; p++)
    {
        *p = i;
        i++;
    }
*/
    p = p + 1;
    printf("p:%d\n", *p);

    system("pause");
    return 0;
}

======偏移量和类型有关=====

int main(){
    //指针的地址一次偏移量,
    //和使用的数据类型有关
    int a = 10;
    int *p = &a;
    printf("p: %d\n", p);
    p++;
    printf("p: %d\n", p);
    char *cp = "hello world";
    printf("cp: %d\n", cp);
    cp++;
    printf("cp: %d\n", cp);
    system("pause");
    return 0;
}

========c语言中参数交换=========

void swap(int a, int b){
    printf("swap  a address :%#x,b address :%#x\n", &a, &b);
    int temp;
    temp = a;
    a = b;
    b = temp;
    printf("swap  a  :%d,b  :%d\n", a, b);
}
void swap2(int *a, int *b){
    int *temp;
    temp = a;
    a = b;
    b = temp;
}
void swap3(int *a, int *b){
    int temp;
    temp = *a;
    *a =*b;
    *b = temp;
}
int main(){
    int a, b;
    a = 10;
    b = 5;
    printf("a address :%#x,b address :%#x\n", &a, &b);
    //失败
    swap(a, b);
    printf("a  :%d,b  :%d\n", a, b);
    //失败
    swap2(&a, &b);
    printf("a  :%d,b  :%d\n", a, b);
    //成功
    swap3(&a, &b);
    printf("a  :%d,b  :%d\n", a, b);
    system("pause");
    return  0;
}

=======冒泡排序    数组=======

void sort(char *name[], int n);

int main(){
    //指针数组
    char *name[] = { "hellow", "dongnao", "alivin" };
    //数组指针
    //char  (*name)[5]  这样首地址指针name
    int n = 3;
    int i;
    sort(name, n);
    for (i = 0; i < n; i++)
    {
        printf("%s  ", name[i]);

    }
    system("pause");
    return 0;

}

void sort(char *name[], int n){
    char *temp;
    int i, j;
    for ( i = 0; i < n; i++)
    {
        for ( j = 0; j < n-1-i; j++)
        {
            if (strcmp(name[j], name[j + 1])>0){
                temp = name[j];
                name[j] = name[j + 1];
                name[j + 1] =  temp;
            } 
        }
    }
}

========//二级指针=====

int main(){
    int a = 100;
    int *p;
    p = &a;
    printf("%d \n", *p);

    int **p2;
    p2 = &p;
    printf("%d \n", **p2);

    system("pause");
    return 0;
}

猜你喜欢

转载自blog.csdn.net/lolyiku/article/details/81129060