c和指针程序6.2与6.3 分析

这里写图片描述
我觉得内存模型大概是如此:
这里写图片描述
如果改变strings++那么指针将会指向第二行,如果使用(*strings)那么指针将会向后移动一列。
在find_char1函数中:
char *string;
while((string = *strings++)!=NULL){ //将会改变令指针数组指向下一行?
while(*string !=’\0’){
printf(“%c\n”,*string);
if(*string++ == value)
return 1;
}
}
在 find_char2函数中:
while(strings!=NULL){
while(**strings!=’\0’){
printf(“%c\n”,*(*strings));
if(*(*strings)++ == value)//将会改变指针数组指向后面一个数据?
return 1;
}
strings++;

但是最后的结果运行函数一并没有改变?

由于指针数组中每一行类型是数组并没有指针控制,而在每一个指针中却有指针控制。所以*(*strings)便改变了
比如对于定义中的*string[2];
输出第一个数组第二个数组:
printf(“%c\n”,*string[0]+1);

include

include

include “assert.h”

int find_char1(char **,char);
int find_char2(char **,char);
int main(int argc, char *argv[])
{
char *string[2] = {“12”,”34”};
find_char1(string,’1’);
printf(“\t%s\n”,*string);
find_char2(string,’1’);
printf(“\t%s\n”,*string);

system("pause");
return 0;

}

int
find_char1(char **strings ,char value){
char *string;
while((string = *strings++)!=NULL){
while(*string !=’\0’){
printf(“%c\n”,*string);
if(*string++ == value)
return 1;
}
}
return 0;
}

int
find_char2(char **strings,char value){
//assert(strings!=NULL);
while(strings!=NULL){
while(**strings!=’\0’){
printf(“%c\n”,*(*strings));
if(*(*strings)++ == value)
return 1;
}
strings++;
}
return 0;
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值