打印
[牛人杂谈]

C语言的指针

[复制链接]
720|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zhuomuniao110|  楼主 | 2017-3-30 16:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zhuomuniao110 于 2017-3-30 16:37 编辑

输出变量地址

#include

int main() {
    int var1;
    char var2[10];
    printf("var1 变量的地址: %x\n", &var1); // %x表示按16进制输出
    printf("var2 变量的地址: %x\n", &var2);
    return 0;
}
var1 变量的地址: 5dc06b94
var2 变量的地址: 5dc06b9e
指针本质

指针是一个变量,其值为另一个变量的地址。
所有指针的值的实际数据类型都是一样的,不管是整型、浮点型、字符型,还是其他的数据类型,都是一个代表内存地址的长的十六进制数。不同数据类型的指针之间唯一的不同是,指针所指向的变量或常量的数据类型不同。

NULL指针

在变量声明的时候,如果没有确切的地址可以赋值,为指针变量赋一个 NULL 值是一个良好的编程习惯。赋为 NULL 值的指针被称为空指针。
NULL 指针是一个定义在标准库中的值为零的常量。
注意:这里的值为0不是指针指向0,而是指针对应的地址是0

#include

int main() {
    int *ptr = NULL;
    printf("ptr 的值是 %x\n", ptr);
    return 0;
}
ptr 的值是 0
在大多数的操作系统上,程序不允许访问地址为 0 的内存,因为该内存是操作系统保留的。然而,内存地址 0 有特别重要的意义,它表明该指针不指向一个可访问的内存位置。但按照惯例,如果指针包含空值(零值),则假定它不指向任何东西。

指针数组

指针数组的每个值都是一个地址,都指向一个相同类型的值。

例1
#include

const int MAX = 3;

int main() {
    int var[] = {10, 100, 200};
    // 把ptr声明为一个数组,由MAX个整数指针组成。
    // ptr中的每个元素,都是一个指向int值的指针。
    int i, *ptr[MAX];
    for (i = 0; i < MAX; i++) {
        ptr = &var; /* 赋值为整数的地址,&取地址 */
    }
    for (i = 0; i < MAX; i++) {
        printf("Value of var[%d] = %d\n", i, *ptr);
    }
    return 0;
}
Value of var[0] = 10
Value of var[1] = 100
Value of var[2] = 200
例2
指针数组中的每个指针指向一个字符串

#include

const int MAX = 4;

int main() {
    /* 理解为这是一个 *char 组成的数组,每个元素都指向字符串的首地址 */
    char *companies[] = {"Apple", "Google", "Facebook", "Pinterest"};
    for (int i = 0; i < MAX; i++) {
        printf("Value of companies[%d] = %s\n", i, companies);
    }
    return 0;
}
Value of companies[0] = Apple
Value of companies[1] = Google
Value of companies[2] = Facebook
Value of companies[3] = Pinterest
沙发
zhuomuniao110|  楼主 | 2017-3-30 16:38 | 只看该作者
其实数组就是一个特殊的指针应用,你所用到的数组名就是该数组的指针。

使用特权

评论回复
板凳
zhuotuzi| | 2017-3-30 20:13 | 只看该作者
取地址的操作是指针的一个关键点。通过指针取内容也是。

使用特权

评论回复
地板
598330983| | 2017-3-31 22:05 | 只看该作者
单片机里面用这个也很多

使用特权

评论回复
5
zhuotuzi| | 2017-4-5 19:31 | 只看该作者
NULL指针指向的地址为0x00000000,其实内在中地址的范围是0x00000000~0xffffffff,地址中的每一个字节都可以存储东西。

使用特权

评论回复
6
天灵灵地灵灵| | 2017-4-6 13:48 | 只看该作者
在变量声明的时候,如果没有确切的地址可以赋值,为指针变量赋一个 NULL 值是一个良好的编程习惯。赋为 NULL 值的指针被称为空指针。

使用特权

评论回复
7
huangcunxiake| | 2017-4-6 19:53 | 只看该作者
NULL从来不敢用,怕用坏了。

使用特权

评论回复
8
玛尼玛尼哄| | 2017-4-6 21:36 | 只看该作者
数组的名字就是首地址。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

188

主题

3247

帖子

10

粉丝