int main(void)
{
int banben,shuliang
printf("您想用哪种版本?(1/2)\n\t1、标准版(3.5)\谨隐t2、豪华版(5.5)\n")
scanf("%d",&banben)
printf("请输入数量:"让樱)
scanf("%d",&shuliang)
banben -=1
printf("一共坦晌丛%.1f元。\n",shuliang*(3.5+2*banben))
return 0
}
/************************************************************************//*
POIT
ENTER
ST
EW
Press any key to continue
首先:
c[0] = "ENTER" = (c+0) = c c在这里其实相当于一个二维数组的首地址(因为我们利用char**定义变量并利用malloc分配内存, 最后逐个赋值同样可以实现此过程的)
c[1] = "new" = *(c+1)
c[2] = "poit" = *(c+2)
c[3] = "first" = *(c+3)
而cp是指向char**的数组(好像是**的优先级更高些),
上面的我们说过char *c[] 可以通过char** c = (char **)malloc(sizeof(size))实现
这里的c描述的就是第二维指针, *(c+i)描述的是第一维指针
现在我们的char**cp[] = {c+3, c+2, c+1, c}
就比较容易理解了, 因为c+i等同于char中的c[i]是一个字符串
由此可以得
cp[0] = "first" = (cpp+0)// 这个是因为char***cpp貌似等芦碰同于(char**)*cpp我们想想char**位charpp类型则可表述位charpp * cpp(这里的cpp其实就等同于前面的char**数组名cp了)
cp[1] = {"poit", "first"} = (cpp+1)
cp[2] = {"new", "poit", "first"} = (cpp+2)
cp[3] = {"enter", "new", "poit", "first"} = (cpp+3)
{这里要注意一点, 这里不是说cp每个都做了对c的数据拷贝, 而至在原始c数组上定义的一个个指针(假设很多游标指向了不同的位置)}
好到现在我们就可以进行数据的输出了
那现在开始输出
printf("%s\n",**++cpp)
++cpp变化到(cpp+1) = {"poit", "first"}, 另定义为cpp1
*(cpp1) = *(cpp1+0) cpp1+0位"poit" 地址, 然后**++cpp其实就是*(*(cpp1+0)+0)得到的其实是一个字符(char)也就是p
但是输出的时候%s是按照字符串输出到字符串结束符(\0)的时候停止的
所以输出的是整个字符串poit
printf("%s\n,",*--*++cpp)
因为我们知道自增自减的时候变量本身发生了变化, 此时的cpp指向的是cpp1的地址, 也就是{"poit", "first"}
然后首先++cpp变到了{"new", "poit", "first"}, 这个时候其实对于*(++cpp)和++cpp都是指向了"new", 然后最外层指针执行--即将*cpp地址指向了最初C的首地址(因为次首地址已经是"new"的地址了), 但是特别需要注意的是cpp地址还是指枝哗掘向cp[2]的, 因为-- *** 作的对象是*++cpp
即此时*--*++cpp指向的实际是"ENTER"中的'E'输出的时候同上输出的是ENTER
printf("%s\n", *cpp[-2]+3)
这个时候cpp[-2]运算到了cp[0](因为上一步说明了cpp仍指向cp[2]),然后*cpp[-2]就指向了与cpp[-2]一样的地址, 就是那个字符串"first"然后+3 *** 作对字符串做地址便宜, 指向猛核了s字符, 输出的时候输出到字符串结尾即输出st, 至于那个逗号是因为前面的输出中多加了一个逗号, 且在\n之后
上面的cpp[-2]是直接做便宜取值, 对cpp本身没有做任何改变, 所以cpp仍指向cp[2], 这时cp[-1]就获取到cp[1]的首地址, 然后继续一个[-1]这个就是对指向地址向后退一个位置 其实已经超出了cp[1]范围, 但是可以获取到c[1](也就是cp[2])的地址, 也即指向了"new"字符串 然后执行+1 *** 作,获取到"new"里面的e, 这时输出的时候就是ew
说的有些混乱也有点罗嗦, 但是我的理解就是这样的, 希望对你能有所帮助
*/
/************************************************************************/
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)