亲宝软件园·资讯

展开

C语言 指针

清风自在 流水潺潺 人气:0

一、* 的意义

如下:

int i = 0;
int j = 0;
int* p = &i; //指针声明
j = *p; //取值

变量 p 保存着变量 i 的内存地址,即:p <--> &i *p <--> i

* 号类似一把钥匙,通过这把钥匙可以打开内存,读取内存中的值。

下面看一个指针的使用示例:

#include <stdio.h>
int main()
{
    int i = 0;
    int* pI;
    char* pC;
    float* pF;
    
    pI = &i;
    
    *pI = 10;
    
    printf("%p, %p, %d\n", pI, &i, i);
    printf("%d, %d, %p\n", sizeof(int*), sizeof(pI), &pI);
    printf("%d, %d, %p\n", sizeof(char*), sizeof(pC), &pC);
    printf("%d, %d, %p\n", sizeof(float*), sizeof(pF), &pF);
    
    return 0;
}

输出结果如下:

所有 32 位系统上的指针变量占用内存大小都为 4 个字节。

二、传值调用与传址调用

下面看一个利用指针交换变量的代码:

#include <stdio.h>
 
int swap(int* a, int* b)
{
    int c = *a;
    
    *a = *b;
    
    *b = c;
}
 
int main()
{
    int aa = 1;
    int bb = 2;
    
    printf("aa = %d, bb = %d\n", aa, bb);
    
    swap(&aa, &bb);
    
    printf("aa = %d, bb = %d\n", aa, bb);
    
    return 0;
}

输出结果如下:

三、常量与指针

const int* p;    //p 可变,p 指向的内容不可变
int const* p;    //p 可变,p 指向的内容不可变
int* const p;    //p 不可变,p 指向的内容可变
const int* const p;    //p 和 p 指向的内容都不可变

口诀:左数右指

当 const 出现在 * 号左边时指针指向的数据为常量,当 const 出现在 * 后右边时指针本身为常量

下面通过一个例子加深理解:

#include <stdio.h>
 
int main()
{
    int i = 0;
    
    const int* p1 = &i;
    int const* p2 = &i;
    int* const p3 = &i;
    const int* const p4 = &i;
    
    *p1 = 1;    // compile error
    p1 = NULL;  // ok
    
    *p2 = 2;    // compile error
    p2 = NULL;  // ok
    
    *p3 = 3;    // ok
    p3 = NULL;  // compile error
    
    *p4 = 4;    // compile error
    p4 = NULL;  // compile error
    
    return 0;
}

输出结果如下:

四、小结

加载全部内容

相关教程
猜你喜欢
用户评论