学习日志
姓名:于慧 日期: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;
}