数组指针与指针数组的理解

在进行阅读Yolo源码的时候,由于其都是用C写的,在指针方面,遇到了很多问题,现在就问题,对C进行更深的理解。

1.C当中的strcpy与strcat函数的区别

字符串处理strcpy,strcat函数的用法:1)strcat是用来连接两个字符串的,原型是char *strcat(char *dest,char *src),作用是把src所指字符串添加到dest结尾处(覆盖dest结尾处的'\0')并添加'\0'2) strcpy是用来把字符串拷贝到指定的地方的,原型是char *strcpy(char *dest,const char *src),作用是把从src地址开始且含有NULL结束符的字符串复制到以dest开始的地址空间。注意:strcat是从dest的结尾处开始操作的,而strcpy是直接覆盖dest指向的内容。3)C语言中,头文件均为<string.h>。

2.C中定义一个字符串指针

定义一个字符串指针,将数组的初始地址给字符串指针,即可完成复制。

3.字符串的传递

将数组的首地址传递过去,每一位进行修改,即可完成对输入数组重新赋值。

在C语言中,数组名可以赋值给指针表示地址,但是却不能指针却不能赋值给数组名,由于数组名是一个常量,其不能被改变。

4. char**与char *a[]的区别

char *a[]:由于[]的优先级要比*高,所以a先与[]结合,本质上其是一个char*类型的一个数组,保存的是地址。

    #include <stdio.h>
   int main()
   {
    char *a [ ] = {"China","French","America","German"};
    printf("%p %p %p %p\n",a[0],a[1],a[2],a[3]);
    return 0;
   }

返回值为4个字符串的首地址,占据4*4个字节。

char**s:为二级指针, s保存一级指针 char *的地址,关于二级指针就在这里不详细讨论了 ,简单的说一下二级指针的易错点。 

   char *a [ ] = {"China","French","America","German"};
   char **s =   a;

  为什么能把 a赋给s,因为数组名a代表数组元素内存单元的首地址,即 a = &a[0] = 0012FF38;

       而 0x12FF38即 a[0]中保存的又是 00422FB8 ,这个地址, 00422FB8为字符串"China"的首地址。

       即 *s = 00422FB8 = "China";

         这样便可以通过s 操作 a 中的数据

char **a;
a=(char**)malloc(sizeof(char*)*3)
char* str1="aaa"
char* str2="bbb"
char* str3="ccc"
a[0]=str1;
a[1]=str2;
a[3]=str3;

参考博客:https://blog.csdn.net/daiyutage/article/details/8604720

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值