🐷这些题都是黑马程序员C语言课程的作业,看完视频可以来看看这个回味一下挺好的。兄弟们求求点赞了。
- 如何在栈上开辟一个二维数组,如何在堆上开辟一个二维数组?
char a[10][20]
char ** a=NULL;
a=(char**)malloc(sizeof(char*)*10);
for (int i=0;i <10;i++)
{
a[i]=(char*)malloc(sizeof(char)*20);
}
- int main(int argc, char *argv[]);
argc, argv分别代表什么?
argc 为参数个数 ,默认有一个,这个就是程序名!
argv 就是指针数组,由于数组作为参数传递会退化为指针,因此写为 char** argv
同样正确。
- 找到数组中指定字符串的位置
#define NUM(a) (sizeof(a)/sizeof(*a))
char* keywords[] = {
“while”,
“case”,
“static”,
“do”
};
int searcheKeyTable(const char* table[], const int size,
const char* key, int *pos);
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define NUM(a) (sizeof(a)/sizeof(*a))
const char* keywords[] = {
"while",
"case",
"static",
"do"
};
int searcheKeyTable(const char* table[], const int size,
const char* key, int *pos){
int ret=0;
int flag=-1;
if(table==NULL||key==NULL)
{
ret=-1;
printf("searcheKeyTable err: %d",ret);
}
/*依次遍历指针数组,找到对应的字符串*/
for(int i=0;i<size;i++)
{
ret=strcmp(table[i],key);
if(ret==0)
{
*pos=i+1;
flag=0;
break;
}
else
continue;
}
if(flag==-1)
{
printf("didn't find !\n");
return -2;
}
printf("successful!\n");
return 0;
}
int main(){
int pos;
int ret=0;
ret=searcheKeyTable(keywords,NUM(keywords),"static",&pos);
printf("position=%d\n",pos);
printf("ret=%d\n",ret);
return 0;
}
- 将字符串数组进行排序
int sort(char **array1, int num1,
char (*array2)[30], int num2,
char ***myp3 /out/, int *num3);
int main()
{
int ret = 0;
char *p1[] = {“aa”, “ccccccc”, “bbbbbb”};
char buf2[10][30] = {“111111”, “3333333”, “222222”};
char **p3 = NULL;
int len1, len2, len3, i = 0;
len1 = sizeof(p1)/sizeof(*p1);
len2 = 3;
ret = sort(p1, len1, buf2, len2, &p3, &len3);
return 0;
}
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
void printA(char **p,int n);
int sort(char **array1, int num1,
char (*array2)[30], int num2,
char ***myp3 /*out*/, int *num3)
{
if(array1==NULL||array2==NULL||myp3==NULL||num3==NULL)
return -1;
int i=0,j=0;
int len;
char buf[100]={
0};
char ** temp=NULL;
len=num1+num2;
//为myp3开辟对堆空间
temp=(char**)malloc(len*sizeof(char*));
for(i=0;i<len;i++)
{
temp[i]=(char*)malloc(100*sizeof(char));
memset(temp[i],0,100);
}
for(i=0;i<num1;i++)
{
strncpy(temp[i],array1[i],strlen(array1[i]));
}
for(j=0;j<num2;j++)
{
strncpy(temp[i+j],array2[j],strlen(array2[j]));
}
//排序前
printA(temp,len);
putchar('\n');
for(i=0;i<len-1;i++)
{
for(j=i+1;j<len;j++)
{
if(strcmp(temp[i],temp[j])>0)
{
strcpy(buf,temp[i]);
strcpy(temp[i],temp[j]);
strcpy(temp[j],buf);
}
}
}
*num3=len;
*myp3=temp;
return 0;
}
void printA(char **p,int n)
{
for(int i=0;i<n;i++)
{
printf("%s\n",p[i]);
}
return ;
}
int main()
{
int ret = 0;
char *p1[] = {
"aa", "ccccccc", "bbbbbb"};
char buf2[10][30] = {
"111111", "3333333", "222222"};
char **p3 = NULL;
int len1, len2, len3, i = 0;
len1 = sizeof(p1)/sizeof(*p1);
len2 = 3;
ret = sort(p1, len1, buf2, len2, &p3, &len3);
printA(p3,len3);
return 0;
}
4. 重写结构体嵌套一级指针老师和二级指针学生的代码
//结构体类型,每个导师有三个学生
typedef struct Teacher
{
char *tName; //导师
char **stu; //三个学生
int age;
}Teacher;
//在createTeacher中分配空间
int createTeacher(Teacher **p/*out*/, int n1,