【C语言】指针 亦凉 2022-06-12 04:49 263阅读 0赞 50、指针变量用来记录地址数据 51、只有记录了有效地址的指针变量才可以使用 52、声明指针变量时需要在变量名称前写\* 53、指针变量名称前加\*可以表示指针所捆绑的存储区 54、指针也是分类型的,不同类型的指针适合与不同类型的存储区捆绑 55、可以在一条语句里声明多个同类型的指针变量,每个指针变量名称前都需要单独加\* 56、没有记录有效地址的指针可以分成两类 • 1.空指针里面记录空地址(NULL),这个地址的数值就是0 • 2.其它没有记录有效地址的指针叫野指针 57、程序里禁止出现野指针 58、程序里的所有指针变量必须初始化 59、指针初始化的时候\*没有参与赋值过程 60、程序里一个指针可以在不同的时候和不同的存储区捆绑 61、这个时候可以把指针看作是变量的某种特征或身份 62、如果指针记录了数组里第一个存储区的地址就可以通过这个指针找到数组里的每个存储区 63、指针后加下标就可以表示数组里的存储区 64、地址数据可以参与如下几种计算: • 地址 + 整数 • 地址 - 整数 • 地址 - 地址 65、地址加减整数n实际加减的是n个捆绑存储区的大小 66、数组里第一个存储区的地址加下标可以得到下标对应存储区的地址 67、可以采用如下方法表示数组里下标为num的存储区 \*(arr + num) 其中arr代表数组名称 68、地址减地址结果是一个整数,这个整数表示两个地址之间包含的捆绑存储区个数 69、声明指针变量的时候可以使用const关键字 70、如果声明指针变量时把const关键字写在类型名称前就表示不可以通过这种指针对它捆绑的存储区做赋值,但是可以对指针本身做赋值 71、如果声明指针变量时把const关键字写在指针变量名称前就表示可以通过这个指针对它捆绑的存储区做赋值但是不可以对指针本身做赋值 72、声明指针变量的时候可以使用void作为类型名称,可以把这种指针叫做无类型指针 73、这种指针可以和任意类型的存储区捆绑 74、无法通过这种指针知道捆绑存储区的类型 75、不应该在这种指针前直接加\*也不应该对这种指针做加减整数的计算 76、这种指针必须首先强制类型转换成有类型指针然后才能使用 77、所有跨函数使用存储区都是通过指针实现的 78、数组做形式参数的时候真正的形式参数就是一个指针 79、声明指针形式参数的时候尽量在类型名称前加const关键字 80、无类型指针通常作为形式参数使用 /* * 指针演示 * */ #include <stdio.h> void exercise_1(void) { int arr[] = { 4, 2, 3, 4, 5}; int num = 0; int *p_num = arr; //数组名称就是数组的地址,所以可以直接用数组名称对指针进行初始化 for(num = 0; num <= 4; num++) { printf("%d ", arr[num]); printf("%d ", p_num[num]); } } void exercise_2() { int arr[] = { 4, 2, 3, 4, 5}; printf("arr是%p\n,arr+1是%p\n,arr-1是%p\n", arr, arr + 1, arr - 1);// 地址运算所加减的数的大小是所绑定存储区的大小。 printf("*(arr+3):%d\n*arr+3:%d\narr[3]:%d\n", *(arr + 3), *arr + 3, arr[3]);//使用*(arr+num)可以得到数组中的内容 // *arr+3的值是先区数组第一个数,然后再加3,*(arr+3)的值是取数组第4个 printf("(arr+3)-arr:%d\n", (arr + 3) - arr);//地址相减是个整数 } void exercise_3() { int num = 0; const int *p_num = # // *p_num = 10; //声明指针时加上const关键字后就不能对该变量进行赋值了 p_num = NULL; //可以对指针本身做赋值 } void exercise_4() { int num = 0; char ch = 'a'; float fnum = 4.3f; // void *p_v =#//void 类型的指针可以和任意类型的存储区捆绑,这种指针无法进行*运算,也无法进行加减整数的运算,要想使用必须进行强制转换为有类型的 // *p_v = &ch; // *p_v = &fnum; } void print(const int *arr, int size) { //声明指针形参时,尽量在类型前加 const关键字 int i = 0; for(i = 0; i <= size - 1; i++) { printf("%d", *(arr + i)); } } /* * 编写函数,可以显示调用函数中任意类型存储区的内容 * 无类型指针作形参 * */ void exercise_5(void *p, int type) { if(!type) { printf("%d", *(int*)p); } else if(type == 1) { printf("%c", *(char*)p); } else if(type ==2) { printf("%g", *(float*)p); } } int main() { // exercise_1(); // exercise_2(); // exercise_3(); // int arr[] = {1, 2, 3, 4, 5}; // int size = 5; // print(arr,size); int num = 10; char ch = 'a'; float fl = 4.7f; exercise_5(&num, 0); exercise_5(&ch, 1); exercise_5(&fl, 2); return 0; } /* * 用指针实现对数组元素的赋值和显示 * */ #include <stdio.h> int main() { int arr[5] = {0}; int *p_arr = arr; int i = 0; for(i = 0; i <= 4; i++) { *p_arr = i + 1; p_arr++; } p_arr = arr; //因为上面赋值已经使指针指向了数组最后一个,所以在进行显示 时还需要返回 for(i = 0; i <= 4; i++) { printf("arr[%d]=%d\n", i, *(p_arr + i)); } return 0; } /* * 指针变量演示 * */ #include <stdio.h> void exercise_1() { int num = 0; int *p_num; //声明了一个指针变量, 建议在名称前加p做开头 p_num = # //为指针变量赋值 *p_num = 10; //指针变量前加*可以表示该指针所指向的地址 printf("num 的值是%d\n", num); } /* * 键盘输入3个数,把他们从小到大顺序输出到屏幕; * */ int exercise_2(int *p_a, int *p_b, int *p_c) { int tem = 0; if(*p_a < *p_b) { tem = *p_a; *p_a = *p_b; *p_b = tem; } if(*p_b < *p_c) { tem = *p_b; *p_b = *p_c; *p_c = tem; } if(*p_a < *p_c) { tem = *p_a; *p_a = *p_c; *p_c = tem; } } /* * 利用指针和异或交换 * */ int exercise_3(int *p_a, int *p_b, int *p_c) { if(*p_a < *p_b) { *p_a = *p_a ^ *p_b; *p_b = *p_a ^ *p_b; *p_a = *p_a ^ *p_b; } if(*p_a < *p_c) { *p_a = *p_a ^ *p_c; *p_c = *p_a ^ *p_c; *p_a = *p_a ^ *p_c; } if(*p_b < *p_c) { *p_b = *p_b ^ *p_c; *p_c = *p_b ^ *p_c; *p_b = *p_b ^ *p_c; } } /* * 改变指针内的内容,返回函数中时还是没有变的 * */ int exercise_4(int *p_a, int *p_b, int *p_c) { int tem = 0; int *p_tem = &tem; //在交换指针内容时,中间变量也得是指针变量 if(*p_a < *p_b) { p_tem = p_a; p_a = p_b; p_b = p_tem; } if(*p_b < *p_c) { p_tem = p_b; p_b = p_c; p_c = p_tem; } if(*p_a < *p_c) { p_tem = p_a; p_a = p_c; p_c = p_tem; } printf("函数中:%d %d %d", *p_c, *p_b, *p_a); } int main() { // exercise_1(); int a = 0, b = 0, c = 0; int *p_a = &a, *p_b = &b, *p_c = &c; printf("请输入3个整数:"); scanf("%d%d%d", p_a, p_b, p_c);//指针里存放的就是地址了 // exercise_2(p_a, p_b, p_c); // exercise_3(p_a, p_b, p_c); exercise_4(p_a, p_b, p_c); printf("主函数:%d %d %d\n", c, b, a); return 0; }
相关 C语言 - 指针 什么是指针 指针存储的是变量的内存地址。 申明指针的方式 通过`类型`进行声明,比如 int ip; / 一个整型的指针 / dou 偏执的太偏执、/ 2023年10月17日 16:56/ 0 赞/ 124 阅读
相关 C语言指针 文章目录 一、变量的地址 二、指针 三、对指针赋值 四、通过指针操作内存变量 五、再来讨论函数的参数传递 六、空指针 七、数组的 ゝ一纸荒年。/ 2023年07月19日 10:46/ 0 赞/ 46 阅读
相关 【C语言】指针 50、指针变量用来记录地址数据 51、只有记录了有效地址的指针变量才可以使用 52、声明指针变量时需要在变量名称前写\ 53、指针变量名称前加\可以表示指针所捆绑的存储区 亦凉/ 2022年06月12日 04:49/ 0 赞/ 264 阅读
相关 c语言指针 //指针怎么用 // (区分两个概念,指针变量和指向内容,指针变量只保存一个地址值,在这个地址值对应的内存中具体存放的东西叫做指向内内容) 用变量 ╰半夏微凉°/ 2022年06月04日 08:58/ 0 赞/ 279 阅读
相关 C语言指针 C语言中,指针尤为重要。 1可以把指针看作是一个数据类型。 ![SouthEast][] 打印结果: ![SouthEast 1][] 2 在指针声 今天药忘吃喽~/ 2022年05月31日 03:39/ 0 赞/ 268 阅读
相关 C 语言指针 1、CPU 访问内存,是通过内存地址来读写内存数据的,CPU 与内存条硬件之间有个地址总线,CPU 通过地址总线将要访问/写入的内存地址告诉内存条。 2、对于 CPU 而言地 拼搏现实的明天。/ 2022年05月29日 01:54/ 0 赞/ 303 阅读
相关 C语言指针 1、指针的基本知识 (1)定义 int \p; (2)赋值 1) int a;int p=&a 2) int a ;int p; 喜欢ヅ旅行/ 2022年03月26日 05:22/ 0 赞/ 314 阅读
相关 C语言:指针 今天研究了一下午终于把指针研究明白了 include<stdio.h> include<stdlib.h> int main() { 快来打我*/ 2022年03月25日 21:14/ 0 赞/ 328 阅读
相关 C语言-指针 1.指针和指针变量 > 内存区的每一个字节都有编号,这就是地址 > 如果在程序中定义了一个变量,在对程序进行编译和运行时,系统就会给这个变量分配内存单元,并确 àì夳堔傛蜴生んèń/ 2022年01月26日 11:17/ 0 赞/ 375 阅读
相关 C语言指针 变量的地址 我们已经知道,内存变量简称变量,在C语言中,每定义一个变量,系统就会给变量分配一块内存,而内存是有地址的。如果把计算机的内存区域比喻成一个 小咪咪/ 2021年11月10日 23:06/ 0 赞/ 487 阅读
还没有评论,来说两句吧...