C++ 的指针*和引用&的使用

经测试,以下三种写法都可以正常编译。

int*a;
int* a;
int *a;

作用是创建一个int型指针变量,a是指针变量。它是被指变量的快捷方式,而不是一份复制品。

指针a是空的所以不能对*a进行操作,比如:

int* a;
*a = 1;

这是不对的,因为*a相当于一个被指针a指着的int变量,但是指针a没有指向任何变量,所以不能被赋值。会报code=3221225477。

同理,

int *a;
int b = 1;
*a = b;

也是不对的。

正确的做法是

int *a;
int b;

a=&b;

指针a就指向b了,此时再

int *a;
int b;
int c = 8;

a = &b;
*a = 3;
*a = c;

就不会报错了。

对于函数的引用,比如

void insert(list &l, int index, int value){
...
}
insert(list, 0, 1)


我更趋向于理解成定义了一个指针(比如list* a),让指针a指向传入的list(a=&list),而函数里的l相当于*a。

以下是一个不带头节点,也不判断是否是第一个元素,的单链表插入函数。是最近看数据结构的产物,也是趋势我仔细看看指针的原因。

void linked_list_insert(linked_list &l, int index, int value){
    int current_index = 0;
    linked_list* current_node;
    current_node = &l;
    //找到index对应的节点
    while(current_index < index && current_node != NULL){
        current_node = &((*current_node) -> next_node);
        current_index += 1;
    } 
    //断言找到index
    if(index != current_index){
        throw invalid_argument("Index Erro");
    }
    //判断有无后驱
    node* next_node;
    if(*current_node == NULL){
        next_node = NULL;
    }
    else{
        next_node = (*current_node) -> next_node;
    }
    //构建新节点
    node* new_node = (node*)malloc(sizeof(node));
    new_node->value=value;
    new_node->next_node=next_node;
    *current_node = new_node;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值