学习日志
姓名:陈长稳 日期:7.11
今日学习任务:
今日主要复习了指针和变量、数组及函数间的关系
今日任务完成情况 :
基本完成了今日的学习任务,了解了指针和变量、数组及函数间的关系,并对c语言知识中指针的使用有了更深的认识。
今日开发中出现的问题汇总:
1.在定义指针变量时,忘了加*号,导致程序在编译时出错;
2.未给定义指针分配地址空间;
3.str=“helloworld”;//不合法
今日未解决问题:
今日开发收获:
一.指针
1.32位操作系统中,不同类型的指针都是4个字节
* 取值
*有两层含义
定义的时候:表示变量是一个指针
是有那个的时候:取值
int *p(保存int类型) char *p double *p
y = *px++(先赋值后指针向后移动四个字节)
2. 利用指针运算实现库函数strcpy
#include <stdio.h>
void mystrcpy(char *dest, char *src)
{
while(*src != '\0')
{
*dest = *src;
src++;
dest++;
}
//取值 赋值 判断 指针向后移动
//while((*dest++ = *src++) != '\0')
}
int main()
{
char str[64] = "helloworld";
char ptr[64] = {0};
mystrcpy(ptr,str);
printf("%s\n",ptr);
while(1);
return 0;
}
3.#include <stdio.h>
int main()
{
//什么样的内存可以使用:一定是操作系统分配的
//比如: int a; 操作系统分配4个字节
//char *ptr //局部变量 未初始化 随机值 内存不能使用
//野指针:指向不能使用的内存空间
//char ptr[64];
//malloc;申请(合法的)内存 返回值void *
char *ptr = (char *)malloc(sizeof(char) * 64);
strcpy(ptr,"helloworld");
printf("%s\n",ptr);
while(1);
return 0;
}
4.字符串逆序
#include <stdio.h>
#include <string.h>
#include <stdio.h>
//字符串逆序
int main()
{
char *ptr = (char *)malloc(sizeof(char) * 64);
char *begin;
if(NULL==ptr)
{
printf("malloc failure!\n");
return -1;
}
printf("input:\n");
scanf("%s",ptr);
begin = ptr;
ptr += strlen(ptr) - 1;
while (ptr >= begin)
{
printf("%c", *ptr--);
}
while(1);
return 0;
}
二.指针和数组
1. int main()
{
int a[5] = {1, 2, 3, 4, 5};
int *p1 = (int*)(&a+1);
int *p2 = (int*)((int)a+1);
printf("%d %d %d", *p1,*p2,*p3);
while(1);
return 0;
}
2.用字符串指针指向一个字符串
char *string[]={"helloworld","i am","daxian"};
printf("%s\n", string[]);
char *s=" C Language";表示s是一个指向字符串的指针变量。
把字符串的首地址赋予s。
char *string1 = "I love China";
char *string2 = "I am";
char *string[2] = {"","" };
char *ptr; //野指针
ptr = "helloworld"; //指针的赋值,把字符串的首地址赋值给ptr
char str[]= {"helloworld"}; //合法的
char str[]= "helloworld"; //合法的
char str[20]; //在栈上面分配20个字节的内存 str(值是固定的 常指针)
str= "helloworld"; //不合法的 常量 (有固定的地址)
三.字符数组和字符串的区别
1.字符串指针变量本身是一个变量,用于存放字符串的首地址。而字符串本身是存放在以该首地址为首的一块连续的内存空间中并以“\0”作为串的结束。
字符数组是由若干个数组元素组成的,它可用来存放整个字符串。
2.对字符串指针方式 char *ps="C Language";
可以写为: char *ps; ps="C Langua";
而对数组方式: char st[]={"C Language"};
不能写为: char st[20]; st={"C Language"};
&取地址符
int *p3 = (int*)(a+1);
3.char *ptr = "helloworld"; //合法的
自我评价:
今日的复习,对指针有了更加深入的了解,知道了字符数组和字符串的区别