苏嵌学习日志3

学习日志

姓名:于慧 日期:2018.7.11

 

 

今日学习任务

 

复习C语言知识点:

指针:指针运算

指针和数组

指针和字符串

 

今日任务完成情况

 

(详细说明本日任务是否按计划完成,开发的代码量)

1. 指针运算符

& 是取地址的运算符  &a ==== 0x100

* 是表示指针运算符  

1)定义的时候,表示变量是一个指针;char  * p = &a

2)使用的时候,取值  *p === ‘a’

#include <stdio.h>

int main()

{

//不管什么类型的指针都是4个字节

printf("&d\n", sizeof (int *));

printf("&d\n", sizeof (double *));

printf("&d\n", sizeof (char *));

printf("&d\n", sizeof (float *));

printf("&d\n", sizeof (short *));

 

while(1);

return 0;

}

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

2. 指针运算

Int x = 3, y= 0, *px = &x;  

Y = *px + 5;  8

Y = ++*px;  4  

Y = *px++;

 

思考:

(*p1)++, *p1++ 区别?

(*p1)++ x的内容加1

*p1++是先求*p1的值(x), 然后再 p1++ ,只想下一个元素,不再指向x

 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

3. 逆序输出一段字符串

#include <stdio.h>

int main()

{

char *begin

char *ptr = (char*)malloc(sizeof(char)*32);

char *str = (char*)malloc(sizeof(char)*32);

    if(NULL == ptr)

{

printf(" malloc failure\n");

return -1;

}

 

printf(" input: \n");

scanf("%s", ptr);

 

begin = ptr;

ptr += strlen(ptr)-1;

while(ptr >= begin)

{

*str++ = *ptr++;

}

    *str='\0';

  ptintf("%s\n",res-strlen(begin));

 

#if 0

while(ptr >= begin)

{

printf("%c",*ptr--);

}

end if

while(1);

    return 0;

}

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 

4. 指针和字符串

#include <stdio.h>

int main()

{

char string[] = "helloworld";//栈空间 可读可写

//str 栈空间  字符串  代码段

char *str = "helloworld!!"; //只读不可写

printf("%s\n",string);

printf("%s\n",str);

 

string[1] = 'a';

*(str+1)='a';

 

while(1);

    return 0;

}

 

用字符串指针指向一个字符串

Main()

{

Char*string[]={I love China!”,”I am”};

Printf(“%s\n”,string);

}

Char *s=”C languang’; 则表示s是一个指向字符串的指针变量。

将字符串的首地址赋予s.

 

#include <stdio.h>

#define SIZE 10

int main()

{

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);

}

 

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(a[j] > a[j+1])

if(strcmp(a[j],a[j+1])>0)

{

tmp = a[j];

a[j] = a[j+1];

a[j+1] = tmp;

}

}

}

}

while(1);

    return 0;

}

 

 

 

今日开发中出现的问题汇总

 

 

 

今日未解决问题

 

1. 利用指针运算实现库函数strcpy 函数

2. 思考:

int a[5] = {1,2,3,4,5}

 

Int *p1 = (int*)(&a+1)

Int *p2 = (int*)((int)a+1)

Int *p3 = (int*)(a+1)

P1[0], p2[0], p3[0] 的值分别为多少?

今日开发收获

 

 

自我评价

(是否按开发规范完成既定任务,需要改进的地方,与他人合作效果等)

指针部分,我的复习效果不是很好,跟不上老师的节奏,很多问题都不会做

 

其他

作业:

4.编写一个C函数,将“ I am from shanghai ”倒置为“ shanghai from am I ”,即将句子中单词位置倒置,而不改变单词内部结构。

#include <stdio.h>
#include <string.h>

#include <stdlib.h>

int main()

{

    char *str[] = { "I", "am","from","shanghai" ,NULL};
    int i = 0;
    int j = 0;
    int len  = 0;
    char *temp;
    while (str[i] != NULL)
    {
        i++;
        len++;
    }
    for(i = 0, j = len - 1; j  > i; i++,j--)
    {
        temp =*(str+i);
        *(str+i) = *(str+j);
        *(str+j) = temp;
    }
    for(i = 0; i < len; i++)
    {
        printf("%s ", *(str+i));
    }
    printf("\n");

    return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值