这是要问几个啊
arr是二维数组,有5行,从arr[0]到arr[4],arr[5]就是二维数组arr内存块之后的第一个字节地址----这段能理解吗? 这个不理解,就麻烦了
如果理解了,那么for(int i=0;i<5;i++) * temp = * (arr+i);这里就是将temp指针指向arr二维数组的每一行。
显然这个temp指针地址一定是小于arr[5]这个地址的----这个理解吧?因为arr[5]是二维数组之后的地址
然后内循环每次就是从arr的第0行,第1行,第2行,一直到第4行开始,逐个元素赋值到二维数组的最后一个元素。---这个能理解?
那么从第0行开始赋值的话,一共5*5=25个元素,自然就是从0到24,因此第0行就是0-4,可以理解?赋值一遍后,x是多少?是不是24?
然后从第1行开始赋值的话,一共5 * 4=20个元素,就是从25-44,因此第1行就是25-29,可以理解吗?x一直在增加啊
然后继续第2行,和上面规律一样。。。。
#include<stdio.h>
int main(int argc,char **argv){
int arr[5][5]={0}; // 初始全为0
int a = 0;
for(int i=0;i<5;i++)
{
int *temp = *(arr+i); // 第n次 temp->a[n]
// 第一次temp的地址为arr[0][0], temp++ 以后temp地址变为arr[0][1]
// 当temp地址为arr[0][4]时,再temp++ temp地址变为 arr[1][0]....以此类推
// 当temp为arr[4][4]时,再temp++ 才为 arr[5]头节点的位置
// 所以第一遍循环结束,arr[5][5]的数据为 0~24
// 你可把i<5 改成i<1,看看循环只就行一遍,arr[5][5]每个数到底是什么
for(;temp<arr[5];temp++){
*temp = a++;
}
}
for(int i=0;i<5;i++){
for(int j=0;j<5;j++){
printf("%d\t",arr[i][j]);
}
putchar('\n');
}
return 0;
}
#include <stdio.h>
#include <stdlib.h>
char *convertAndMerge(char s[2][20]);
int main(void)
{
char words[2][20] = {"Welcome to Xiyou ","Linux Group 2022"};
printf("%s\n",words[0]);
printf("%s\n",words[1]);
char *str = convertAndMerge(words);
printf("str = %s\n",str);
free(str);
}
char *convertAndMerge(char s[2][20]) {
char *key = (char*)malloc( 50*sizeof(char));
int len = 0;
for(int z=0;z<2;z++){
for(int z1=0;s[z][z1]!='\0';z1++){
key[len] = s[z][z1];
len+=1;
}
}
key[len] = '\0'; // 记得加上结束符
return key;
}
解答如下
#include <stdio.h>
#include <stdlib.h>
//请实现ConvertAndMerge函数∵
//拼接输入的两个字符串,并翻转拼接后得到的新字符串中所有字母的大小写。提示:你需要为新字符串分配空间。
char* convertAndMerge(char words[2][20]);
int main(void){
char words[2][20] = {"welcome to Xiyou ", "Linux Group 2022"};
printf( "%s\n", words[0]);
printf( "%s\n", words[1]);
char *str = convertAndMerge(words);
printf ( "str = %s\n", str) ;
free(str);
}
char* convertAndMerge(char words[2][20])
{
int n=2;
char *str=(char*)malloc(n*20);
int p=0;
for(int i=0;i<n;i++)
{
}
}
return str;
}
二维数组的数组元素在内存是连续排列的,代码中内层循环的意思是用temp指针遍历二维数组中从arr[i]位置到arr[5]位置之间的所有数组元素。
i=0时,temp从arr[0]到arr[5],遍历了25个数组元素,每个元素依次被赋值为0,1,2,3,4,5,6, ..., 23, 24
i=1时,temp从arr[1]到arr[5],遍历了20个数组元素,从arr[1]开始的元素依次被赋值为25,26,27,...,44
依次类推