第十弹--详解指针

简介: 第十弹--详解指针

指针运算

指针±整数

指针关系运算是与指针类型息息相关,如果是char* 类型,指针变量+1,那么地址增加一个字节。
int main()
{
  int arr1[]={0,1,2,3,4,5,6,7,8,9};
  int* p=arr1;
  int sz=sizeof(arr1)/sizeof(arr1[0]);
  for(int i=0;i<sz;i++)
  {
  printf("%d ",*(p+i));//此时就是指针+整数,地址每次增加4个字节,从而打印下一个数字,最后屏幕输出数组中所有数字   
  } 
  return 0;
}

指针-指针

指针-指针结果为两指针之间元素个数
int my_strlen(char *s)
{
 char *p = s;
 while(*p != '\0' )
 p++;
 return p-s;
}
int main()
{
  printf("%d\n", my_strlen("abc"));//故此打印值为3
  return 0;
}

关系运算(比较大小)

int main()
{
  int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
  int* p = &arr[0];
  int i = 0;
  int sz = sizeof(arr) / sizeof(arr[0]);
  while (p < arr + sz) //指针的⼤⼩⽐较
  {
    printf("%d ", *p);
    p++;
  }
return 0;
}

野指针

野指针成因

1.指针未初始化
int main()
{ 
 int *p;//局部变量指针未初始化,默认为随机值
 *p = 20;
 return 0;
}
2.指针越界
int main()
{
 int arr[10] = {0};
 int *p = &arr[0];
 int i = 0;
 for(i=0; i<=11; i++)
 {
 //当指针指向的范围超出数组arr的范围时,p就是野指针
 *p=i;
 p++;
 }
 return 0;
 }
3.指向已释放的空间
int* test()
{
 int n = 100;//创建的是临时变量,出函数就会被程序释放
 return &n;
}
int main()
{
 int*p = test();
 printf("%d\n", *p);
 return 0;
 }

如何规避野指针

1.指针初始化,就算不知道暂时赋值多少,可以把指针赋值为NULL
2.注意指针越界,申请多少就使用多少,不要越界使用
3.避免使用函数内部创建的局部变量

传值调用 传址调用

传值调用

 void Swap1(int x, int y)
{
  int tmp = x;
   x = y;
   y = tmp;
}
int main()
{
  int a = 0;
   int b = 0;
   scanf("%d %d", &a, &b);
  printf("交换前:a=%d b=%d\n", a, b);
  Swap1(a, b);//只传变量,无法完成交换是传值
   printf("交换后:a=%d b=%d\n", a, b);
 return 0;
}

传址调用

void Swap2(int*px, int*py)
{
   int tmp = 0;
   tmp = *px;
   *px = *py;
   *py = tmp;
}
int main()
{
   int a = 0;
   int b = 0;
  scanf("%d %d", &a, &b);
  printf("交换前:a=%d b=%d\n", a, b);
   Swap1(&a, &b);//传地址,函数中地址改变就可以完成数字交换
  printf("交换后:a=%d b=%d\n", a, b);
 return 0;
 }


相关文章
|
2天前
|
数据采集 人工智能 自然语言处理
3分钟采集134篇AI文章!深度解析如何通过云无影AgentBay实现25倍并发 + LlamaIndex智能推荐
结合阿里云无影 AgentBay 云端并发采集与 LlamaIndex 智能分析,3分钟高效抓取134篇 AI Agent 文章,实现 AI 推荐、智能问答与知识沉淀,打造从数据获取到价值提炼的完整闭环。
337 90
|
10天前
|
机器人 API 调度
基于 DMS Dify+Notebook+Airflow 实现 Agent 的一站式开发
本文提出“DMS Dify + Notebook + Airflow”三位一体架构,解决 Dify 在代码执行与定时调度上的局限。通过 Notebook 扩展 Python 环境,Airflow实现任务调度,构建可扩展、可运维的企业级智能 Agent 系统,提升大模型应用的工程化能力。
|
人工智能 前端开发 API
前端接入通义千问(Qwen)API:5 分钟实现你的 AI 问答助手
本文介绍如何在5分钟内通过前端接入通义千问(Qwen)API,快速打造一个AI问答助手。涵盖API配置、界面设计、流式响应、历史管理、错误重试等核心功能,并提供安全与性能优化建议,助你轻松集成智能对话能力到前端应用中。
782 154
|
16天前
|
人工智能 数据可视化 Java
Spring AI Alibaba、Dify、LangGraph 与 LangChain 综合对比分析报告
本报告对比Spring AI Alibaba、Dify、LangGraph与LangChain四大AI开发框架,涵盖架构、性能、生态及适用场景。数据截至2025年10月,基于公开资料分析,实际发展可能随技术演进调整。
995 152
|
3天前
|
域名解析 人工智能
【实操攻略】手把手教学,免费领取.CN域名
即日起至2025年12月31日,购买万小智AI建站或云·企业官网,每单可免费领1个.CN域名首年!跟我了解领取攻略吧~
|
2天前
|
数据采集 人工智能 搜索推荐
别再“调教”ChatGPT了!用Qwen2.5打造24小时在线数字分身
在AI时代,专属“数字分身”正从科幻走向现实。依托Qwen2.5-14B大模型、LoRA微调技术及LLaMA-Factory Online平台,仅需四步即可打造会说话、懂风格、能办事的个性化AI助手,让每个人拥有自己的“贾维斯”。
213 152