C语言指针作为形参传递的问题

  1. 指针作为形参传递在方法内分配内存并初始化。
#ifndef NODE_H_INCLUDED
#define NODE_H_INCLUDED

#include <stdio.h>
#include <stdlib.h>

typedef int T;
typedef struct NODE
{
    T data;
    struct NODE *next;
} Node;

Node* Init_Node(Node** node);

#endif // NODE_H_INCLUDED


Node* Init_Node(Node** node)//Node节点的双重指针,也就是指针的指针,取了指针的地址。
{
    *node = (Node *)malloc(sizeof(Node));//使用了*号取指针的值,并对指针的值进行修改。
    if(!node)
        return NULL;
    return node;
}

int main()
{

    Node *head;
    Init_Node(&head); 
    //注意head为一个指针,这里使用了&取地址符又一次取了地址,那么这次就是取了指针的地址了。
    //此时的head初始化成功
  
    if(!head)
        return 0;
    head->data = 1;
    Insert_Node(head,1);
    printf("%d**%d", head->data,head->next->data);
    return 0;
 
}
Node* Init_Node(Node* node)
{
    node = (Node *)malloc(sizeof(Node));//将指针定向为分配的内存。
    if(!node)
        return NULL;
    return node;
}

int main()
{

    Node *head;
    Init_Node(head);
    //通过形参传递指针。
	//此时的head仍然为空
    if(!head)
        return 0;
    head->data = 1;
    Insert_Node(head,1);
    printf("%d**%d", head->data,head->next->data);
    return 0;
}
  1. 结构体指针在方法内传递,并修改成员值
int Insert_Node(Node* node,T val)
{
    node->data = 3;
    printf("%d", head->data);
    //此时输出值为3,值变了。
    return 0;
}
  1. 传递已初始化变量的地址,并在方法内修改值
void swap_num(int *a,int *b)
{
    int temp = *a;
    *a = *b;
    *b = temp;
}


int main()
{
    int x=2,y=5;
    swap_num(&x,&y);
    printf("x=%d ** y=%d", x,y);
    //输出的值交换了
    return 0;
}

void swap_num(int *a,int *b)
{
    int* temp;
    temp = a;
    a = b;
    b = temp;
}


int main()
{
    int x=2,y=5;
    swap_num(&x,&y);
    printf("x=%d ** y=%d", x,y);
    //输出的值没有变化
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值