美文网首页
c语言-----指针

c语言-----指针

作者: 26小瑜儿 | 来源:发表于2019-08-04 20:50 被阅读0次

c语言-----指针

1.声明/定义变量的时候 表示一个指针变量

    float b = 20;
    int c = 10;
    int *a;    //定义一个指针变量 指向的内存空间只能存放整数
   // 注意:定义指针变量的时候一定要给初值 不确定就给NULL
    int *a = b;//不行 指针变量只能存地址 不能存具体值
    int *a = &b;//不行 整形指针只能存整形数据的地址
    int *a = &c;//正确
    float *d = NULL;NULL指向内存的起始地址 0x00

2.除了定义指针变量之外 都是访问某个地址的值

     int *temp = &c;//定义指针变量l
    *temp = 21; 访问temp地址里面的数据 赋值为21
    //‘&’ 取某个变量的地址

3.要学好指针就要抓住两点 (1)地址 (2)内存空间
为什么要用指针:解决跨区域(不同作用域 不同代码块)之间的数据交互
指针最忌讳的:野指针:也就是指向不可用内存区域的指针。通常对这种指针进行操作的话,将会使程序发生不可预知的错误。
注:指针变量在内存里面占据8个字节空间

int main(int argc, const char * argv[]) {
int a = 10;

int *pa = &a;
int a2[10] = {};

int *pa2 = a2;
int(*pFunc)(int) = test;

char c = 'a';
char *pc = &c;
printf("%lu\n",sizeof(a)); //4
printf("%lu\n",sizeof(pa));//8
printf("%lu\n",sizeof(a2));//40
printf("%lu\n",sizeof(pa2));//8
printf("%lu\n",sizeof(pFunc));//8
printf("%lu\n", sizeof(pc));//8

4.数组与指针在内存上的差别:
数组名并不是一个变量 没有分配内存空间 int a = 10;
指针变量是有内存空间
定义一个数组 系统会分配内存空间 可以存值
int num[10] = {};
定义一个指针变量 只为变量本身分配8个字节内存空间
(无法存值,因为没有为他分配可以存值的内存空间)
int *p;
给指针指向的区域赋值:
1.指针变量已经指向某块区域
int a3 = 10;
int *pA = &a3; //指向变量a的内存地址
*pA = 30;

2.指针指向一个数组
int num2[10] = {};
int *pNum = num2; //指向数组num2的首地址
*(pNum+0) = 20; 等价于 pNum[0] = 20;
*(pNum + 1) = 30; 等价于 pNum[1] = 30;

C语言————动态存储

3.动态分配内存
 三个点:  malloc    realloc    free
上面两种指向的内存都是别人的,是系统分配的,一般当出了作用域 内存就会被释放。

而此方法希望分配一个属于自己的内存空间
自己分配的内存空间必须自己释放
注:普通变量的内存是系统自己分配 所以系统自己负责释放

char *pName = malloc(3 * sizeof(char));
//判断分配是否成功
if(pName == NULL){
//分配失败
exit(EXIT_FAILURE);
}
//若分配成功,使:
pName[0] = 'j';
pName[1] = 'a';
pName[2] = 'c';

//当之前分配的内存空间不够了 就需要在之前的基础上重新分配
//realloc 必须是之前使用malloc分配过的
//malloc分配的内存不够用时,用realloc增加分配内存 并将malloc 上的内容复制过去 并将之前malloc分配的内存清除
//如果是系统分配的内存 是不能使用realloc的
//用完了就要自己释放内存
pName =  realloc(pName, 4*sizeof(char));
pName[3] = 'k';

printf("%s\n", pName);
free(pName);

return 0;

}

C语言————结构体

结构体 是一种复合数据类型
//struct
//声明一种类型 struct Person == int
struct Person {
char name[10];
char *addr;
int age;
};

// int i1 = 10;
// struct Person zs = {"张三", 20};
//定义结构体struct Person变量 变量名xw

int i;
i = 20;
struct Person xw;
//xw.name = "小王";此用法错误!!  *数组一旦定义 地址不能改变
                //不能直接给数组赋值
xw.name[0] = 'x';//系统为这个变量分配内存了
xw.name[1] = 'w';

//xw.addr = "西南大学";此用法正确   *常量字符串的地址是由系统分配的
//先为addr分配内存
xw.addr = malloc(4 * sizeof(char));
xw.addr[0] = 'S';//字符指针赋值 必须要有内存
xw.addr[1] = 'o';
xw.addr[2] = 'u';
xw.addr[3] = 't';
xw.age = 30;
printf("name:%s\n", xw.name);
printf("addr:%s\n", xw.addr);

C语言————文件操作

写入数据:

int main(int argc, const char * argv[]) {
//打开文件
//fopen("abc.txt",const char *restrict __mode) ;
FILE *fp=fopen("C:/Users/12931/Desktop/abc1.txt","w");
//写入结构体
struct Student{
char name[10];
int age;
};
struct Student xw1={"小红",20};
fwrite(&xw1,sizeof(struct Student),1,fp);
fclose(fp);
return 0;
}

读取数据:

int main(int argc, const char * argv[]) {
//打开文件
//fopen("abc.txt",const char *restrict __mode) ;
FILE *fp=fopen("C:/Users/12931/Desktop/abc1.txt","r");
//写入结构体
struct Student{
char name[10];
int age;
};
struct Student xw1;
fread(&xw1,sizeof(struct Student),1,fp);
printf("name: %s\n",xw1.name);
printf("age: %d\n",xw1.age);
fclose(fp);
return 0;
}
心得:
此次指针学习让我感受到了C语言的精髓所在,动态分配内存更是让我大开眼界 感觉牛逼的亚子,当然,指针的确比较难,有好多地方像是在读无字天书,就是懂不了,链表更是听的云里雾里,似懂非懂的。感觉自己不懂的还有好多,不过今天也学习了好多指针、结构体、动态分配内存的基础知识,也算很有收获!

相关文章

  • C语言05- 指针

    C语言05- 指针 13:指针 指针是C语言中的精华,也是C语言程序的重点和难点。 13.1:指针定义与使用 指针...

  • 02-C语言的指针

    02-C语言的指针 目标 C语言指针释义 指针用法 指针与数组 指针与函数的参数 二级指针 函数指针 指针在C中很...

  • C语言指针总结大学霸IT达人

    C语言指针总结大学霸IT达人 C语言的指针是C语言区别其它语言的最主要的特定之一。有了指针,C语言就可以抛开所有束...

  • 带小白学C语言指针

    C语言里指针才是C语言的开始和指针;C语言里基本所有东西都是由指针演变而成; 指针是指向地址的变量,类型就是指针...

  • 在Swift中使用C语言的指针

    在Swift中使用C语言的指针 在Swift中使用C语言的指针

  • [Swift]结构体指针操作

    C语言的指针操作 在c语言中申明一个变量并通过指针修改该变量的值 a value is 2 c语言操作结构体指针操...

  • Go语言-指针

    Go语言中的指针不同于C语言,Go语言的指针使用方法要简单很多。当然和C语言从指针定义到指针的使用都有很大的不同。...

  • C语言中的指针与数组

    C语言中的指针与数组 @(C语言)[排序算法, 快速排序, C实现] 引言 相信指针与数组是不少同学在初学C语言时...

  • 指针数组和数组指针

    指针数组|存储指针的数组 在C语言和C++语言中,数组元素全为指针的数组称为指针数组。 例如:int *p[10]...

  • iOS开发 -- C语言基础8(指针)

    iOS开发 -- C语言基础8(指针) 指针是C语言中非常重要的数据类型,如果你说C语言中除了指针,其他你都学得很...

网友评论

      本文标题:c语言-----指针

      本文链接:https://www.haomeiwen.com/subject/gftjdctx.html