原代码如下,如果要通过二级指针p,从a[]中每个字符串的第二个字母开始输出各个字符串(如bcd fg等),该如何修改代码?
#include<stdio.h>
int main()
{
char *a[]={"abcd","efg","hijkl","mno"};
char **p=a;
int i;
for(i=0;i<4;i++)
printf("%c",**p++);
return 0;
}
可以通过在指针p指向的字符串后面加1来跳过第一个字母,然后再输出后面的字符串。修改后的代码如下:
#include<stdio.h>
int main()
{
char *a[]={"abcd","efg","hijkl","mno"};
char **p=a;
int i;
for(i=0;i<4;i++)
printf("%c",*((*p)+1)); // 跳过第一个字母
p++; // 指向下一个字符串
}
return 0;
}
输出结果为:bcd fg ijk lno。
利用加法电路:
1. 将BCD码中的每一位的权值用二进制数表示
2. 将所给BCD码中“1”所代表的二进制数相加
3. 相加结果即为所给的BCD码的等效二进制数
如将BCD码1000 0111转换为二进制数:
通过使用二级指针 p,可以从 a[] 数组中每个字符串的第二个字母开始输出各个字符串。具体的解决方案如下:
c char **p;
c p = a;
c while (*p != NULL) { printf("%s\n", *p + 1); p++; }
在上述代码中,*p
指向 a 数组中的一个字符串,*p + 1
指向该字符串的第二个字符及其后面的字符,因为指针本身的加减操作会根据指针类型的不同而产生不同的效果,此处的 +
运算会根据指向的字符类型自动进行指针增量计算,即将指针加上一个字符大小(通常为 1 个字节)。
```c #include
int main() { char a[] = {"abc", "defg", "hijkl", NULL}; char *p;
p = a;
while (*p != NULL) {
printf("%s\n", *p + 1);
p++;
}
return 0;
} ```