指针学习2,交换,多级指针

本文详细探讨了C/C++中的指针概念,重点讲解了如何进行指针交换以及多级指针的使用。通过实例解析,帮助读者掌握指针在数据结构和算法中的核心应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

​#include<stdio.h>
void huhuan_1(int, int);
void huhuan_2(int*, int*);
void huhuan_3(int*, int*);int main()
{
  int a = 3,b=5;
  huhuan_3(&a, &b);
  printf("a=%d,b=%d", a, b);return 0;
}
void huhuan_1(int p , int q)//不能完成交换功能
{
  int t;
  t = p;
  p = q;
  q = t;
}
void huhuan_2(int*p, int*q)//不能完成交换功能     
{
  int *t;
  t = p;
  p = q;
  q = t;
}
void huhuan_3(int *p,int *q)//可以完成交换功能
{ 
  int t;
  t = *p;
  *p = *q;
  *q = t;
}
如何通过被调函数修改主调函数普通变量的值

1.实参必须为该普通变量的地址
2.形参必须为指针变量
3.在被调函数中通过*p=...的方式就可以修改主调函数相关变量的值
#include<stdio.h>
int main(void)
{
  int i = 5;
  int *p,*q;
  p = &i;
  //*q = *p;//q未初始化
  q = p;
  printf("%d\n", *q);
  return 0;
}//结果为5
指针和数组

#include<stdio.h>
void f(int *pArr, int len);
int main(void)
{
  int a[5] = { 1,2,3,4,5 };
  f(a, 5);
  return 0;
}
void f(int *pArr, int len)
{
  int i;
  for (i = 0; i < len; ++i)
  {
    printf("%d  ", *(pArr + i));
  }
  printf("\n");//输出结果1  2  3  4  5
}
# include <stdio.h>int main(void)
{
  int a[5]; //a是数组名  5是数组元素的个数 元素就是变量  a[0]  -- a[4]
//  int a[3][4]; //3行4列 a[0][0]是第一个元素 a[i][j]第i+1行j+1列
  int b[5];
  
  //a = b;//error a是常量
  printf("%#X\n", &a[0]);
  printf("%#X\n", a);
                      //     0X12FF6C                        
  return 0;          //      0X12FF6C 
}
1.一维数组名是一个指针常量,它存放的是一维数组第一个元素的地址
2.下标和指针的关系若p是一个指针变量则p[i]=*(p+i)
3.确定一个一维数组需要两个参数:
a:数组第一个元素的地址
b:数组的长度
void f(int * p)
{
  *p = 10;
 }
int main(void)
{
  int i = 5;
  f(&i);
  printf("i=%d\n", i);
  return 0;
}
#include <stdio.h>
int main(void)
{
  int i = 5, j = 10, *p = &i, *q = &j;
  int a[5];
  p = &a[1];
  q = &a[4];
  printf("p和q所指向的单元相隔%d个单元\n", q - p);return 0;
}
//结果为3
1.指针变量不能相加 不能乘除
2.如果两个指针变量指向的是同一块连续空间的不同储存单元
则这两个指针变量才可以相减


 
#include <stdio.h>
int main(void)
{
  int i = 10,*p=&i,**q=&p,***r=&q;//*p=**q=***r=i *q=&p *r=&q
  printf("i=%d\ni=%d\ni=%d\n", ***r, **q, *p);
    return 0;
}//结果是10
1.p只能存放int类型变量的地址
2.q是int **类型,so ,q只能存放int *类型的地址
2.r是int***类型所谓的int***类型就是r只能存放int **类型变量的地址
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值