C基础day9(2023.7.11)

一、Xmind整理:

二、课上练习:

 练习1:实现字符串逆置

#include 
#include 
#include 
int main(int argc, const char *argv[])
{
	char str[]="hello";
	char *p=str;
	char *q=str+strlen(str)-1;
	while(p

 练习2:值传递 

#include 
#include 
#include 
void fun(int a)
{
    printf("a=%d\n",a);
}
void fun_p(int *p)
{
    printf("p=%p\n",p);
}
int main(int argc, const char *argv[])
{
    int a=100;
    int arr[]={11,22,33};
    int *p=&a;//p=&a  *p=a
    fun(a);
    fun(arr[0]);
    fun(*p); 
    fun_p(&a);
    fun_p(arr);
    fun_p(p);
    return 0;
}

 练习3: 指针和一维数组

#include 
#include 
#include 
void fun(int *arr,int len)
{
	int *p=arr;
	for(int i=0;i

 练习4:使用指针实现冒泡排序、简单选择排序

#include 
#include 
#include 
void Bubble(int *p,int n)
{
	for(int i=1;i*(p+j+1))
			{
				int t=*(p+j);
				*(p+j)=*(p+j+1);
				*(p+j+1)=t;
				count++;
			}
		}
		if(count==0)
			break;
	}
	for(int i=0;i

 练习5:指针指向字符数组的地址

int main(int argc, const char *argv[])
{
    char str[]="hello";//str在栈区,字符串"hello"在只读区,
                       //把字符串常量复制一份给str 
    char *p=str;//p=str   //p内存在栈区,p指向栈区str首地址
    *p='H';
    //正确,p修改栈区的内容
    puts(str);
    puts(p);
}

 练习6: 定义数组str,指针p,通过p指向str

              通过指针实现输入

              通过指针把大小转换小写

              通过指针实现输出

#include 
int main(int argc, const char *argv[])
{
    char str[20];
    char *p=str;
    printf("please enter p:");
    gets(p);
    for(int i=0;i='a'&&*(p+i)<='z')//if(str[i]>='a'&&str[i]<='z')
        {
            *(p+i)-=32;
        }
    }
    printf("%s\n",p);
    return 0;
}

 练习7:实现字符串连接 

#include 
#include 
#include 
void my_strcat(char *dest,char *src)
{
	int i=0;
	for(i=0;*(dest+i)!='\0';i++);
	for(int j=0;*(src+j)!='\0';j++)
	{
		*(dest+i++)=*(src+j);
	}
	*(dest+i)='\0';
}
int main(int argc, const char *argv[])
{
	char dest[20]="das";
	char src[20]="ewew";
	my_strcat(dest,src);
	puts(dest);
	return 0;
}

三、课后作业:

 1.下面的代码有什么错误

void test()
{
	char string[10];
	char *str1="0123456789";
	strcpy(string,str1);
 }

 答:这里声明的是一个字符串长度为10的数组,但"0123456789"的长度为11,在将str1拷贝          至string时,会导致数组越界。

        ①当越界访问的空间没有被占用,可以正常访问,输出垃圾值;

        ②当越界访问的空间被占用,但是不是重要的数据,可以访问,输出垃圾值 ​;

        ③当越界访问的空间被占用,并且存储重要的数据,不可以访问,段错误。

 2.请问一下代码有什么问题 

int main()
{
	char a;
	char *str=&a;
	strcpy(str,"hello")
	printf(str)
	return 0;
}

答:共有两处错误。

       ①在定义一个字符串数组的时候,不能直接定义为a,定义为a指向的是单字符a的地址,它只能容纳一个字节大小,所以在函数将字符串“hello”复制给str时,会导致越界;

       ②strcpy(str,"hello")与printf(str)两个语句,未使用分号结束。 

 3.有什么错?

char* s="AAA";
printf("%s",s);
s[0]='B';
printf("%s",s);

答:指针s指向的是字符串常量,字符串常量在只读区,只能读取不能修改,s[0]='B'表示对字符串常量的第一个值进行修改,所以会报错,出现段错误 。

 4.下面是一段计算0……100累加和的代码,请指出这段代码中的错误。

int main()
{
	int *MyData;
	int Count=100;
	int Sum,i;
	for(i=0;i

答:共有两处错误。

       ①i

       ②int *MyData定义的是一个野指针,未被初始化的指针会造成计算机混乱,甚至死机【计算机随机的地址,不确定,不正确】;  

       ③sum没有初始化,未清零。

你可能感兴趣的:(c语言,开发语言)