<<征服C指针>>学习笔记

来源:互联网 发布:魔侠传 网络异常 编辑:程序博客网 时间:2024/06/05 18:55

1.什么是指针?

在C语言标准中最初出现”指针”一词的部分,有这样一段话:
{
指针类型可由函数类型\对象类型\或不完全的类型派生,派生指针类型的类型称为引用类型.
指针类型描述一个对象,该类对象的值提供对该引用类型实体的引用.
由引用类型T派生的指针类型有时称为”(指向)T的指针”.
从引用类型构造指针类型的过程称为”指针类型的派生”.这些构造派生类型的方法可以递归的应用.
}

提及”类型”,我们首先想到的是”int类型”\”double类型”……同样,C中也存在”指针类型”这样的类型.
“指针类型”:
{
并不单独存在,它是由其他类型派生而成的.即实际上存在的类型是”指向int的指针类型”\”指向double的指针类型”….
也存在”指针类型变量”和”指针类型的值”.
}

2.首次接触指针.
以实际代码输出指针的值.

#include <stdio.h>int main(void){    int hoge = 5;    int piyo = 10;    int *hoge_p;    //输出每个变量的地址    printf("&hoge: %p\n", &hoge);    printf("&piyo: %p\n", &piyo);    printf("&hoge_p: %p\n", &hoge_p);    //将hoge的地址赋予hoge_p    hoge_p = &hoge;           //至此,我们认为"hoge_p指向hoge"    printf("hoge_p: %p\n", hoge_p);    //通过hoge_p输出hoge的内容    printf("*hoge_p: %d\n", *hoge_p);    //通过hoge_p修改hoge的内容    *hoge_p = 10;    printf("hoge: %d\n", hoge);    return 0;}

要点:
{
对变量使用&运算符,可取得该变量的地址.这个地址称为指向该变量的指针.
指针变量hoge_p = &hoge 时,称 hoge_p指向hoge.
对指针变量运用*运算符,等同于它指向的变量.如果hoge_p指向hoge,*hoge_p == hoge.
}

3.指针声明.

常见的C的声明像:
int hoge;
使用”类型 变量名”的形式.
而”指向int的指针”类型的变量,常采用这样的声明方法:
int *hoge_p;
这里,int* 是类型(指向int的指针类型),hoge_p为变量名,

int* hoge_p;
这种书写方式虽符合”类型 变量名”的形式,但在同时声明多个变量的情况时会出现歧义,
int* hoge_p, piyo_p;
//声明两个”指向int的指针”? ——并不是.