如何在C语言中打印未调整大小的数组
我是C语言的新手,正试图弄明白如何用C语言打印一个大小不一的数组。使用下面的代码,我的输出看起来很奇怪,但我不知道原因 我需要一些帮助:如何在C语言中打印未调整大小的数组,c,multidimensional-array,printf,C,Multidimensional Array,Printf,我是C语言的新手,正试图弄明白如何用C语言打印一个大小不一的数组。使用下面的代码,我的输出看起来很奇怪,但我不知道原因 我需要一些帮助: main() { int i; char *prt_1st; char list_ch[][2] = {'1','a', '2','b', '3','c','4','d','5','e','6','f' }; prt_1st = list_ch; for (i = 0; i < sizeof(list_ch);
main()
{
int i;
char *prt_1st;
char list_ch[][2] = {'1','a', '2','b', '3','c','4','d','5','e','6','f' };
prt_1st = list_ch;
for (i = 0; i < sizeof(list_ch); i++) {
prt_1st += i;
printf("The content of the array is %c under %d position\n", *prt_1st, i);
}
}
main()
{
int i;
字符*prt_第一;
字符表[2]={'1','a','2','b','3','c','4','d','5','e','6','f'};
prt_1st=列表;
对于(i=0;i
通过获取元素数量,可以打印未定义长度的数组
printf("%s", list_ch)
++list_ch
This will automatically put your ptr to the next index in your array
希望这有帮助:)好的,代码中的问题是
prt_1st += i;
它将指针增加i倍,但您需要的是将指针增加1倍
这是修改后的代码
int main()
{
int i;
char *prt_1st;
char list_ch[][2] = {'1','a', '2','b', '3','c','4','d','5','e','6','f' };
prt_1st = list_ch[0];
for (i = 0; i < sizeof(list_ch); i++)
{
//prt_1st += i;
printf("The content of the array is %c under %d position\n", *prt_1st, i);
prt_1st = prt_1st + 1;
}
return 0;
}
intmain()
{
int i;
字符*prt_第一;
字符表[2]={'1','a','2','b','3','c','4','d','5','e','6','f'};
prt_1st=列表[0];
对于(i=0;i
以下功能可用于处理可能的对齐问题:
int main()
{
int i, j;
char (*prt_1st)[2];
char list_ch[][2] = {{'1','a'}, {'2','b'}, {'3','c'},{'4','d'},{'5','e'},{'6','f'} };
for (i = 0; i < sizeof(list_ch)/sizeof(list_ch[2]); i++) {
for (j=0; j<sizeof(list_ch[2]); j++)
printf("The content of the array is %c under %d,%d position\n", list_ch[i][j], i,j);
}
return(0);
}
intmain()
{
int i,j;
字符(*prt_1st)[2];
字符列表{'1','a'},{'2','b'},{'3','c'},{'4','d'},{'5','e'},{'6','f'};
对于(i=0;i 对于(j=0;j,您应该声明并初始化一个2d数组,其中第一个大小未指定,如下所示:
char list_ch[][2] = {{'1','a'}, {'2','b'}, {'3','c'}, {'4','d'}, {'5','e'}, {'6','f'}};
这样做,sizeof(list_ch)
的结果将是12
。数组的元素在内存中应该是连续的(除非PualOgilvie指出,编译器决定让每一行从字边界开始,从而导致不一致),您可以使用如下指针在循环中扫描它们:
int i;
char *prt_1st = list_ch;
for (i = 0; i < sizeof(list_ch); i++) {
printf("Position: %d Element: %c\n", i, prt_1st[i]);
}
inti;
char*prt\u 1st=列表;
对于(i=0;i
或者保持2D特性:
char *prt_1st;
int dim = sizeof(list_ch) / sizeof(list_ch[0]);
for (i = 0; i < dim; i++) {
prt_1st = list_ch[i];
printf("The first char of row %d is %c\n", i, prt_1st[0]);
}
char*prt_第一;
int dim=sizeof(list_ch)/sizeof(list_ch[0]);
对于(i=0;i
您的数组是二维的,但您正在以一维方式初始化它。这不好。是的,它是“大小”的,因为大小是从初始值设定项推断出来的。“未大小数组”是什么?对sizeof
运算符进行一些研究。虽然此处使用不当,但这是解决问题的方法。您应该执行prt_1st++
,而不是使用i
递增。可能存在对齐问题,因为编译器可能决定让每行从字边界(32/64位边界)开始,但一行只有2个字节。“奇怪的输出”并不是一个非常明确的问题陈述。在问题中包括实际输出。对于“元素的单个大小”,建议使用直接方法sizeof(*list\u ch)
或sizeof(list\u ch[0])
您已经知道数据类型将是相同的,因此每次通过大小读取数据类型就足够了,它读取已知数据类型的速度比某些数组快。感谢您的帮助=)在我的解决方案中sizeof(list_ch[2])
有误导性。它应该是sizeof(list_ch[0])
(第一行)或sizeof(char[2])
。有什么建议吗?sizeof(list\u ch[0])
对我有用。你为什么认为list\u ch[2]
有误导性?我在做一本书中的练习。数组的定义应该保持不变。不过谢谢你的代码。=)@Bob,list\u ch[2]
有误导性,因为2
表示第二(三)个行,而不是维度的大小。为什么编译器要在内存中连续排列它们?为什么编译器不应该让每一行从字边界(32/64位边界)开始但是一行只有2个字节?@PaulOgilvie老实说,我原以为标准中有规定,但我看到了你的观点你的代码也很有效。Danke!我现在看到了。谢谢!
char *prt_1st;
int dim = sizeof(list_ch) / sizeof(list_ch[0]);
for (i = 0; i < dim; i++) {
prt_1st = list_ch[i];
printf("The first char of row %d is %c\n", i, prt_1st[0]);
}