21天学通c语言总结(3)

第15天:有关指针的高级用法

指向指针的指针

int multi[3][4];
int (*ptr)[4];
int *p;
p = (int *)ptr;

上面multi是一个指针指向multi[0],multi[0]也是一个指针指向multi[0][0]。
ptr是一个能指向包含4个int变量的数组的指针变量,数组指针。必须用圆括号否则声明的是指针数组,因为间接运算符的优先级低于[]。
(int *)是强制类型转换,暂时将ptr的数据类型从声明的类型转换为新的类型。

指针数组

char *mes[20];
将指针数组传递给函数:
void pfs(char *p[], int n);
void pfs(char **p, int n);
上面两个均可以传递指针数组,实际上传递的是指向指针的指针。
int指针数组,int *p[4]; p[0]+1;的内容并不是p[1]而是p[0]所表示的地址加上4个字节。

malloc()默认返回void类型的指针。前面加(char *)强制转换。

函数指针

type (*ptr_to_func)(paremeter_list);
*ptr_to_func加括号是因为 *的优先级小于()。如果不加则定义的是返回指针的函数。
被指向函数的返回类型和参数列表必须和指针声明的返回值和参数列表相同。
int square(int);
int (*ptr)(int);
ptr = square;

不带括号的函数名是一个指向函数的指针常量。

  • 声明函数指针一定用圆括号;
  • 不要将函数指针指向返回类型和参数列表不匹配的函数。

链表

链表中的数据被存储在结构中。

struct person{
   
char name[20];
struct person *next;
};

组成链表的结构可称为链接、节点或元素。
最后一个节点的next指针为NULL,头指针(非结构)指向第一个节点。

  1. 节点加入开头
new = (struct person*)malloc(sizeof(struct person));
new->next = head;
head = new;		//如果先赋值头指针,链表丢失
  1. 节点添加至末尾
struct person *current;
current = head;
while (current-> != NULL)
	current = current->next;
new = (struct person)malloc(sizeof(struct person));
current->next = new;
new->next = NULL;
  1. 节点添加至中间
struct person *marker;	// desired location
...
new = (...)malloc(...);
new->next = marker->next;
marker->next = new;
  1. 删除节点
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值