指针学习

1 常量指针!如 int b, c; int * const a = &b;

        表示a是一个常量指针它指向变量b的内存。但是因为是常量指针所以不能再用a指向其他变量,如 a = &c; 错误!可以修改指向内存的值,如:*a = 20;

       常量指针声明的时候必须向我那样赋初值。

 2 指向常量的指针!如 int b, c; int const *a; a = &b; a = &c;

      都可以,唯独它指向的内存不能被修改。如:*a=20;这是违法的!错误!

要判断到底那个是 const 其实很简单在 * 上划一条竖线,const 位于那边就是修饰其对应的右边

                    |

    const char * p;  // const 修饰 *p;

                    |

                    |

     char const * p;  // const 修饰 *p;

                    |

         |

  char * const p;  // const 修饰 p;

         |

 

怎样建立和理解非常复杂的声明?例如定义一个包含N个指向返回指向字符的指针的函数的指针的数组?

这个问题至少有以下2种答案:

    1. char *(*(*a[N])())();

    2. typedef 逐步完成声明:

            typedef char *pc; /* 字符指针*/

            typedef pc fpc(); /* 返回字符指针的函数*/

            typedef fpc *pfpc; /* 上面函数的指针*/

            typedef pfpc fpfpc(); /* 返回函数指针的函数*/

            typedef fpfpc *pfpfpc; /* 上面函数的指针*/

            pfpfpc a[N]; /* 上面指针的数组*/

我似乎不能成功定

义一个链表。我试过typedef struct { char

我似乎不能成功定义一个链表。 我试过

typedef struct {

char *item;

NODEPTR next;

} *NODEPTR;

但是编译器报了错误信息。难道在C语言中一个结构不能包含指向自己的指针吗?

C 语言中的结构当然可以包含指向自己的指针;NODEPTR 例子的问题是在声明next域的时候typedef还没有定义。为了解决这个问题,首先赋予这个结构一个标签(“struct node”)。然后,声明“next” 域为“struct node *”, 或者分开typedef 定义和结构定义, 或者两者都采纳。以下是一个修改后的版本:

struct node {

char *item;

struct node *next;

};

typedef struct node *NODEPTR;

我总算弄清除函数指针的声明方法了, 但怎样才能初始化呢?

用下面这样的代码

extern int func();

int (*fp)() = func;

当一个函数名出现在这样的表达式中时, 它就会蜕变成一个指针(, 隐式地取出了它的地址), 这有点类似数组名的行为。通常函数的显示声明需要事先知道(也许在一个头文件中)。因为此处并没有隐式的外部函数声明(初始式中函数名并非一个函数调用的一部分)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值