C语言指针

一、char * 和 char [ ]

char a[ ]定义的是一个字符数组,注意强调是数组。
char *  定义的是一个字符串指针,注意强调是指针。
char *s定义了一个char型的指针,它只知道所指向的内存单元,并不知道这个内存单元有多大。
s是一个指针,保存的是一个地址。*s表示的这个地址指向内存的值,ascii码值。
char a[ ]定义的是一个数组;
char *s = (char *)malloc(n);//其中n为要开辟空间的大小
相当于char s[n];
C语言中操作字符串是通过它在内存中的存储单元的首地址进行的,这是字符串的终极本质。
可以s=a; 但是不能a=s; a表示的也是数组的首地址,但是a本质上是一个数组。
还有一个不同是不可以通过下标如s[0]进行赋值,但是数组可以。

二、char **和char *a[ ]

由于[ ] 的优先级高于* 所以a先和 [ ]结合。
他还是一个数组,数组中的元素才是char * ,前面讲到char * 是一个变量,保存的是地址。
也就是说a还是一个数组,只是它里面的元素是地址。
地址不一定是连续的。
char **s为二级指针, s保存一级指针 char *的地址。
用 char **s 时,要给它分配一个内存地址。
char  **s ;
s = (char **) malloc(sizeof(char**));
说白了,二级指针保存的是一级指针的地址,
它的类型是指针变量,而一级指针保存的是指向数据所在的内存单元的地址,
char*s中s是一个地址,保存的内容不是地址,是一个字符串,
char**s中s是一个地址,地址中的内容还是一个地址。

三、*和&

int a=1;
int *b = &a;
a是一个值,&a是a存储的地址,而b是一个地址,存放的是a的地址,*b是取b对应地址的数据。
&b表示的存放这个地址的地址。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值