帮忙看个关于数组指针的有关问题,求解释
帮忙看个关于数组指针的问题,求解释
请各位大神解释下 char* x[] = {"甲","乙","丙","丁","戊","己","庚","辛","壬","癸"};
char* y[] = {"子","丑","寅","卯","辰","巳","午","未","申","酉","戌","亥"};
这两段代码中 char* x[]具体是什么意思?怎么用?为什么没标明空间长度也可以用?还有为什么用%s输出?求解释啊、谢了!
以下是完整版原代码
#include<stdio.h>
void f(int year){
int n;
char* x[] = {"甲","乙","丙","丁","戊","己","庚","辛","壬","癸"};
char* y[] = {"子","丑","寅","卯","辰","巳","午","未","申","酉","戌","亥"};
n=year-1984;
while(n<0)
n=n+60;
printf("这一年是%s%s年\n",x[n%10],y[n%12]);
}
int main(){
int year;
printf("请输入年份:");
scanf("%d",&year);
f(year);
return 0;
}
------解决方案--------------------
先理解char* 是指向字符串的指针,然后是 x[] y[]是数组,也就是指向字符串的两个指针数组。如果你理解int x[] = {1, 2, 3, 4}你就不会觉得没有长度会很奇怪了。。。使用的时候x[0]是指向“甲”字符串的指针,你可以如下访问x[0]的每个字符:
int i = 0;
while (x[0][i] != '\0')
{
printf("%c ", x[0][i]);
++i;
}
当然,因为这里是汉字,每个字两个字节,所以你看到输出的是高低位的字节数字
请各位大神解释下 char* x[] = {"甲","乙","丙","丁","戊","己","庚","辛","壬","癸"};
char* y[] = {"子","丑","寅","卯","辰","巳","午","未","申","酉","戌","亥"};
这两段代码中 char* x[]具体是什么意思?怎么用?为什么没标明空间长度也可以用?还有为什么用%s输出?求解释啊、谢了!
以下是完整版原代码
#include<stdio.h>
void f(int year){
int n;
char* x[] = {"甲","乙","丙","丁","戊","己","庚","辛","壬","癸"};
char* y[] = {"子","丑","寅","卯","辰","巳","午","未","申","酉","戌","亥"};
n=year-1984;
while(n<0)
n=n+60;
printf("这一年是%s%s年\n",x[n%10],y[n%12]);
}
int main(){
int year;
printf("请输入年份:");
scanf("%d",&year);
f(year);
return 0;
}
------解决方案--------------------
先理解char* 是指向字符串的指针,然后是 x[] y[]是数组,也就是指向字符串的两个指针数组。如果你理解int x[] = {1, 2, 3, 4}你就不会觉得没有长度会很奇怪了。。。使用的时候x[0]是指向“甲”字符串的指针,你可以如下访问x[0]的每个字符:
int i = 0;
while (x[0][i] != '\0')
{
printf("%c ", x[0][i]);
++i;
}
当然,因为这里是汉字,每个字两个字节,所以你看到输出的是高低位的字节数字