带你学C带你飞--指针数组与数组指针--课后动动手2题
课后动动手2题的代码是:#include <stdio.h>
#include <string.h>
int main()
{
char *array = {"FishC", "Five", "Star", "Good", "Wow"};
char *(*p) = &array;
int i, j;
for (i = 0; i < 5; i++)
{
for (j = 0; j < 5; j++)
{
if (i > strlen((*p)) - 1)
{
break;
}
printf("%c ", (*p));
}
printf("\n");
}
return 0;
}
请教一下为什么要写
if (i > strlen((*p)) - 1)
{
break;
}
希望各位大神不吝赐教,感谢! 这段代码是一个嵌套循环,用于打印指针数组中的字符。在这个代码中, array 是一个指针数组,每个元素都是一个指向字符的指针。 p 是一个数组指针,指向指针数组 array 。
在内层循环中, (*p) 表示指针数组中的第j个元素,即一个指向字符的指针。 strlen((*p)) 用于计算该指针指向的字符串的长度。
i 表示外层循环的计数器,用于遍历字符串中的每个字符。 i > strlen((*p)) - 1 表示当 i 大于当前字符串的长度减1时,跳出内层循环。这是因为当 i 大于字符串的长度时,访问字符串中的字符会超出字符串的范围,导致访问非法内存,可能导致程序崩溃。
所以这个判断语句的作用是确保在打印字符之前,先检查当前字符串是否已经结束,如果结束则跳出内层循环,避免访问非法内存。 指针数组与数组指针
好的,让我们来解析一下代码中的 if (i > strlen((*p)) - 1) 的作用。
在这段代码中,char *array 定义了一个指针数组,其中每个元素都是一个指向字符的指针。这意味着 array 是一个数组,每个元素都可以存储一个字符串。
而 char *(*p) = &array; 则是定义了一个指向指针数组的指针,使得 p 指向了 array 数组。
接下来进入两层嵌套的循环。外层循环控制行数,内层循环控制列数。
i 代表行数,j 代表列数。通过 (*p) 可以通过指针数组访问具体字符。
而 if (i > strlen((*p)) - 1) 则是用来判断是否超过了当前字符串的长度。如果超过了,则跳出内层循环,不再打印后续字符。
这是因为当行数 i 大于当前字符串的长度减1时,说明已经访问到了字符串的末尾。此时没有需要打印的字符,可以直接跳出内层循环。
需要注意的是,字符串中的字符索引是从0开始的,所以长度减1用以判断是否超过末尾字符。
希望能够解答你的疑问!如果还有其他问题,请随时提问。
如果回答对你有帮助,请给我一个最佳答案!{:10_254:}{:10_254:}{:10_254:}
在给定的代码中,内部的两个嵌套循环(`for (i = 0; i < 5; i++)` 和 `for (j = 0; j < 5; j++)`)用于遍历二维字符数组`array`中的元素,并输出特定的字符。
在每个内部循环的起始处,有一个条件判断语句 `if (i > strlen((*p)) - 1)`。它的作用是判断当前元素的字符串长度是否小于`i+1`,即是否还有足够的字符需要打印。如果没有足够的字符需要打印,则跳出当前内部循环,继续外部循环。
假设有以下的二维字符数组:
char *array = {"FishC", "Five", "Star", "Good", "Wow"};
当`i=0`时,内部循环会依次遍历`array`, `array`, `array`, `array`和`array`。如果某个元素的字符串长度小于等于`i`,则说明该元素没有足够的字符需要打印,因为下标从0开始。此时,为了避免越界访问或输出无意义的字符,通过跳出当前内部循环,能够确保只打印包含足够字符数量的元素。
因此,这段代码的目的是保证只输出字符串中真实存在的字符,避免出现越界访问或打印无意义的字符。 这段代码是一个嵌套循环,它的目的是将一个字符串数组中的字符按列输出成一个倒三角形状。让我解释一下这段代码中的那个条件语句:if(i>strlen((*p))-1){break;}
首先,让我们逐步分析代码的作用:
1. char* array:定义了一个包含5个指向字符型指针的数组,每个指针指向一个字符串。
2. char* (*p) = &array:定义了一个指向数组 array 的指针,即指向指针数组的指针。这样,p 就指向了 array 数组的首地址。
3. for (i = 0; i < 5; i++):外层循环,用来控制行数。
4. for (j = 0; j < 5; j++):内层循环,用来控制列数。
在内层循环中,代码使用了(*p)[ i]来访问指针数组中的字符串的字符。(*p)[ i] 表示 p 指向的数组中的第 j 个字符串的第 i 个字符。现在让我们来解释条件语句 if(i > strlen((*p)) - 1) { break; } 的作用:
这个条件语句的目的是为了确保在输出字符时不越界。由于输出的是倒三角形,每行的字符数递减,因此在一定行数后,某些字符串可能就不足以输出 i+1 个字符,避免访问不存在的内存。
具体来说,strlen((*p)) 表示指针数组中第 j 个字符串的长度。i 是当前外层循环变量,代表行数。因此,i 大于 strlen((*p)) - 1 意味着在第 j 个字符串的长度范围内,该字符串已经没有足够的字符可以输出到第 i+1 列。所以,这时候内层循环就会被中断(通过 break 语句),避免输出越界字符。
综上所述,这个条件语句是为了确保在输出字符时不越界,只输出字符串中实际存在的字符。 学习了
页:
[1]