当前位置: 首页 > article >正文

【C】指针的基本知识点

一、定义

(1) int *p=&number;

(2)int *p;   p=&number;
    p:代表首地址
   *p:代表首地址的值

二、赋值

  int *p,*p1;
   p=p1;
(1)指针可以和普通变量一样正常赋值,但是要相同类型才可
(2)指针变量指向数组首地址,可以像数组一样通过[]来访问数组每个元素
    strPtr=message;
    for(i=0;i<strlen(message);i++)
    {
        printf("%c",strPtr[i]);
    }

三、函数

char* test(char *str)        //*str与str[]等价
{
    int i;
    //char array[10]={0};局部变量
    char *array=(char *)malloc(sizeof(char)*20);
    memset(array,0,20);//初始化,内存清空函数
    for(i=0;i<strlen(str);i++)
    {
        printf("%c",str[i]);
    }
    printf("\n");
    strcpy(array,str);
    printf("array=%s\n",array);
    return array;
}

注意:

(1)可以把指针作为函数返回值,但是绝对不能把函数里面的局部变量的地址返回给外面
(2)返回后局部数组变量都会被销毁
(3)如果一定要返回地址,要自己开辟内存空间,使用malloc函数,默认返回是viod*
(4)调用这个函数记得初始化里面的数据,而且使用完记得销毁free,否则会地址泄露  free(p_str);

四、结构体数组

将结构体指针最为返回值,与上述函数相同,记得释放空间

typedef struct 
{
    int age;
    char name[20];
}PACK_T;


PACK_T* structTest(PACK_T *pack_t)
{
    PACK_T *temp=(PACK_T *)malloc(sizeof(PACK_T));
    memset(temp,0,sizeof(PACK_T));
    pack_t->age=28;
    strcpy(pack_t->name,"chen");
    memcpy(temp,pack_t,sizeof(PACK_T));//内存块的复制
    /*temp->age=29;
    strcpy(temp->name,"fhjd");*/
    return temp;
}


http://www.kler.cn/a/377801.html

相关文章:

  • Rust 构建 TCP/UDP 网络服务
  • xcode更新完最新版本无法运行调试
  • 数据仓库设计-分层
  • 安全关键型嵌入式系统设计模式整理及应用实例
  • 企业数字化转型的架构治理策略:核心问题、深度分析与优化路径
  • 关于我的编程语言——C/C++——第四篇(深入1)
  • Linux中SPI
  • 重学SpringBoot3-整合 Elasticsearch 8.x (一)客户端方式
  • 使用 Logback 的最佳实践:`logback.xml` 与 `logback-spring.xml` 的区别与用法
  • 力扣题解(大礼包)
  • yarn 下载安装、下载依赖、通过 vscode 运行服务(Windows11)
  • 对于自带缓存的对象的注意点
  • 8. 数据结构——邻接表、邻接矩阵的基本操作
  • Elasticsearch Search Template 搜索模板
  • 代码随想录算法训练营第十五天| 654.最大二叉树 、617.合并二叉树 、700.二叉搜索树中的搜索、98.验证二叉搜索树
  • AcWing 320 能量项链 状态压缩dp
  • 【C++刷题】力扣-#566-重塑矩阵
  • 前端八股文第四篇
  • WorkFlow源码剖析——Communicator之TCPServer(上)
  • Linux:编辑器Vim和Makefile
  • ResTful风格的Url
  • Mac如何实现高效且干净的卸载应用程序
  • Gateway解说
  • 目标追踪DeepSort
  • network HCIE认证
  • 一文带你深入理解Rust 中的 Trait 一致性(Coherence)