- 姓名:王星宇 日期:2018.9.3
- 今日学习任务:熟悉Linux虚拟机操作;学习C语言指针、数组的编写,使用。
- 今日任务完成情况:基本跟上老师课堂速度完成程序编写,完成课后作业。
#include <stdio.h>
#include <string.h>
char *mystrcat(char *dest, const char *src)
{
char *tmp = dest;
while (*dest)
dest++;
while ((*dest++ = *src++) != '\0');
return tmp;
}
int main()
{
char str[64] = "123456789";
char *ptr = "hello";
mystrcat(str,ptr);
printf("%s\n",str);
return 0;
}
关于指针字节:
**指针字节:**
#include <stdio.h>
//sizeof() 关键字
int main()
{
printf("int %d\n",sizeof(int));
printf("char %d\n",sizeof(char));
printf("double %d\n",sizeof(double));
printf("float %d\n",sizeof(float));
printf("int * %d\n",sizeof(int *));
printf("char * %d\n",sizeof(char *));
printf("double * %d\n",sizeof(double *));
printf("float * %d\n",sizeof(float *));
return 0;
}
4字节=32位,1字节=8位
int *p=&a; p指针变量 &取地址 *表示p是一个指针
*:定义的时候表示后面的变量是一个指针 int *q;
使用的时候表示取值 *q=3;
*p指向a,*p=3表示把3存入a中
**举例:**
#include <stdio.h>
int main()
{
int a =1;
int *p= &a; //是一个指针,指向a
printf("%p\n",p); //a的地址
printf("%d\n",*p); //a的值
*p=3; //把a修改成3
printf("a =%d\n",a);
return 0;
}
指针运算:
int a,*pa=&a,*pb;pb=pa;
定义整型a,将a赋值给指针pa,定义指针pb,将pa赋值给指针pb,pa pb都指向a
举例:
#include <stdio.h>
int main()
{
int x=3,y=0,*px =&x;
y=*px+5;
printf("y =%d\n",y);
y=++*px; //前置,在执行a所在语句之前,a+1
printf("y =%d\n",y);
y=*px++; //后置,在执行完a所在语句之后,a+1 该语句表示:在a上加4个字节(a是int整型占4个字节) 该语句过程:取值,赋值,地址+1
printf("y =%d\n",y);
return 0;
}
**计算结果:**y=8
y=4
y=4
int a,*p1=&a;
(*p1)++ *p1值+1
*p1++ *p1指向a,a地址+1(a占4个字节,加4个字节)
指针与数组:
int a[10]={1,2,3,4,5,6,7,8,9,0}
int *p=a; //a是数组名,同时也是数组首元素地址,常指针
a和&a 取值相同,但意义不同
a代表数组首元素地址,a+1 加一个元素
&a代表数组地址,&a+1 加一个数组
**举例:
区别:**
int a[5] ={1,2,3,4,5};
int p1 =(int )(&a+1); 指向下一个数组
int p2 =(int )(a+1); 指向第二个元素
int p3 =(int )((int)a+1); 非法访问(指向第一个元素的第二个字节)
*p1[0]
*p2[0]
*p3[0]
今日开发中出现的问题汇总:指针较复杂,还有很多方面都不会或一知半解
今日未解决问题: 指针数组运算等问题不太熟悉
今日开发收获:初步熟悉C语言在Linux环境下编译运行,了解了指针的使用。
自我评价:上课还需提高注意力。
其他:教室太热了,精神不易集中。