C语言中指针与地址

来源:互联网 发布:如何下载mysql数据库 编辑:程序博客网 时间:2024/04/30 00:30


指针 内存指针 指向一个变量或者函数

变量也可以是整形,也可以是字符串也可以是数组

整形的指针声明时必须也是用int声明,指向什么类型的变量,就声明成什么类型的指针。


用&可以取一个变量的指针

例子:

[root@CWG hc]# cat zz1.c
#include <stdio.h>
main()
{
    int a = 5;   
    int *p;                 //声明一个指向int类型变量的指针p
    p = &a;       //p是指向a的指针    &a取a变量的内存地址 赋给p
    fprintf(stdout, "a = %d\n*p = %p\n", *p, p);                  //由于p是指向int a的指针,所以取p地址的值,打印出来的结果应该是int a, %p是打印内存指针,打印出p的值也就是一个内存地址

}

[root@CWG hc]# ./zz1
a = 5                                       //打印出来的是int a的值
*p = 0x7fffab01ad24        //这个内存地址是指向int a变量的一个内存地址


用*可以取出指针指向的变量

例子:

[root@CWG hc]# cat zz1.c
#include <stdio.h>
main()
{
    int a = 5;
    int *p;
    p = &a;  //p指向int a的值 此处的p指向5
    int c;    //声明一个整形c变量
    c = *p + 10; //用*取p指针的值,然后再加10后 将结果赋值给int c
    fprintf(stdout, "c = %d\n", c);
}
[root@CWG hc]# ./zz1
c = 15


********************************************************

注意:void类型的指针可以存放指向任何类型的指针

********************************************************

++*ip 等价于 (*ip)++


赋值:指针等于指针

例子:

[root@CWG hc]# cat zz1.c
#include <stdio.h>
main()
{
    int a = 5;
    int b = 7;
    int *p;
    int *x;
    
    p = &a;  //p等于a的指针 指向int a的值
    x = &b;  //x等于b的指针 执行int b的值
    
    fprintf(stdout,"*p = %d || p = %p\n", *p, p);
    fprintf(stdout,"*x = %d || x = %p\n", *x, x);

    p = x;                 //将指针x的指向赋值给指针p
    printf("P = X\n");
    fprintf(stdout,"*p = %d || p = %p\n", *p, p);
    fprintf(stdout,"*x = %d || x = %p\n", *x, x);
    
}

[root@CWG hc]# ./zz1
*p = 5 || p = 0x7fffb2e7d7fc
*x = 7 || x = 0x7fffb2e7d7f8
P = X                                                 //可见当p=x执行后输出的值如下
*p = 7 || p = 0x7fffb2e7d7f8          //p的指针等于了x,值随即也等于了x,x是指向int b的指针,那么p的指针等于x的指针了,则p指针执行的值也是x了
*x = 7 || x = 0x7fffb2e7d7f8


将a指针的值付给b指针

例子:

[root@CWG hc]# cat zz1.c
#include <stdio.h>
main()
{
    int a = 5;
    int b = 7;
    int *p;
    int *x;
    
    p = &a;  //p等于a的指针 指向int a的值
    x = &b;  //x等于b的指针 执行int b的值
    
    fprintf(stdout,"*p = %d || p = %p\n", *p, p);
    fprintf(stdout,"*x = %d || x = %p\n", *x, x);

    *p = *x;               //将指针x的值赋给指针p
    printf("*P = *X\n");
    fprintf(stdout,"*p = %d || p = %p\n", *p, p);
    fprintf(stdout,"*x = %d || x = %p\n", *x, x);
    
}

[root@CWG hc]# ./zz1
*p = 5 || p = 0x7fffa8996cac
*x = 7 || x = 0x7fffa8996ca8
*P = *X             //可见先用*取出x的值赋值给*p,则效果如下所示 地址指向没变,只是值变了   
*p = 7 || p = 0x7fffa8996cac
*x = 7 || x = 0x7fffa8996ca8


############################################

迷途小运维学习C程序语言随笔

作者:john

转载请注明出处

原创粉丝点击