学习日志 姓名: 尤嘉慧 日期: 2017.07.11
今日学习任务 | C语言中的指针,指针与变量,指针与数组,指针与字符串 |
今日任务完成情况 (详细说明本日任务是否按计划完成,开发的代码量。)
| 今日任务已完成。讲解并改善了上节课布置的作业,熟悉了如何在字符串中插入某个字符。用指针编写了一些程序完成相应的功能。 |
今日开发中遇到的问题汇总 | 不管是什么类型的指针,长度都是4个字节 指针式变量的一种,里面是一个地址,通过这个地址找到要找的数据 指针的实质就是单元的地址就是指针内容 强制类型转换 &a表示数组地址 a是数组名,首元素地址 |
今日未解决问题 | 无 |
今日开发收获 | 【指针】 1、指针是什么?起什么作用? 指针式变量的一种,里面是一个地址,通过这个地址找到要找的数据 实质:单元的地址就是指针内容 2、指针运算符 &是取地址的运算符 &a=0x100 *是表示指针运算符 取值 char *p=&a; p是char *类型 *有两层含义:定义的时候,表示变量是一个指针 使用的时候,表示取值 不管是什么类型的指针,长度都是4个字节 eg: int *p1,a; p1=&a; *p1=3; 3、指针作函数参数 4、指针的运算--赋值运算 int x=3,y=0,*px=&x; y=*px+5; → y=8 y=++*px; → y=4 y=*px++; → y=4
[思考]:(*p1)++,*p1++区别? (*p1)++是x的内容加1; *p1++是先求*p1的值(x)。然后再p1++,指向下一个元素,不再指向x; 【指针和数组】
[思考]: int a[5]={1,2,3,4,5};
int *p1=(int*)(&a+1); //强制类型转换 &a表示数组地址,整个数组 加了20个字节 p1指向最后一个元素后一个元素 int *p2=(int*)((int)a+1); //a是数组名,首元素地址,强制类型转换int将a转换为整型后再加一 若a地址0x100,则p2指向0x101 int *p3=(int*)(a+1); //指向下一个元素 p3指向2
p1[0], p2[0], p3[0] 的值分别为多少?
p1[0] 1703808 (垃圾值) p2[0] 33554432 (垃圾值) p3[0] 2 【指针和字符串】
char string[ ] = "helloworld" //栈空间 helloworld可读可写 char *str ="helloworld!!!" //str 栈空间,helloworld!!!相当于常量,占一个字节 ,只读(不可写) 代码段(也是内存的一种)
用字符串指针指向一个字符串 main() { char *string[]={"I love China!","I am"}; //string是数组,char* ,所以string是指针数组,里面每个元素都是指针 printf("%s\n",string); } char *s="C Language";则表示s是一个指向字符串的指针变量。 把字符串的首地址赋予s
【字符数组与字符串的区别】 1、字符串指针变量本身就是一个变量,用于存放字符串的首地址,而字符串本身是存放在以该首地址为首的一块连续的内存空间中并以'\0'作为串的结束。 字符数组是由于若干个数组元素组成的,它可以用来存放整个字符串。 2、对字符串指针方式 char *ps="C Language"; 可以写为: char *ps;ps="C Language"; 而对数组方式: char st[ ]={"C Language"}; 不能写为: char st[20]; st={"C Language"}; 而只能对字符数组的各元素逐个赋值。
|
自我评价 (是否规范完成指定任务,需要改进的地方,与他人合作等。) | 自我完成程序的能力还是有所欠缺,只能跟着老师或者询问同学才能完成编程,自我能力不够,希望会有所进步。指针部分的知识点概念还是有点混淆,无法应用。 |
其他 | 无 |
编写一个C函数,将“I am from shanghai"倒置为"shanghai from am I",即将句子中的单词倒置,而不改变单词内部结构。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define SIZE 10
void sort(char *a[])
{
int i, j;
char *tmp;
for (i = 0; i < SIZE - 1; i++)
{
for (j = 0; j < SIZE-i-1; j++)
{
if (strcmp(a[j], a[j+1]) > 0)
{
tmp = a[j];
a[j] = a[j + 1];
a[j + 1] = tmp;
}
}
}
}
int main()
{
int i;
char *string[SIZE]={0};
for(i=0;i<SIZE;i++)
{
string[i]=(char*)malloc(sizeof(char)*32);
if(NULL==string[i]);
{
printf("malloc failure!\n");
return -1;
}
scanf("%s",string[i]);
}
sort(string);
for(i=0;i<SIZE;i++)
{
printf("%s",string[i]);
}
printf("\n");
while(1);
return 0;
}
输入:I am from shanghai