|
发表于 2025-1-3 11:21:49
|
显示全部楼层
指针表达式
一个表达式的最后结果如果是一个指针,那么这个表达式就叫指针表达式。下面是一些指针表达式的例子。
- int a, b;
- int array;
- int *pa;
- pa = &a; //&a是一个指针表达式
- int **ptr = &pa; //&pa也是指针表达式
- *ptr = &b; //*ptr和&b都是指针表达式
- pa = array;
- pa++; //这也是指针表达式
- char *arr;
- char **parr = arr; //如果把arr看作指针的话,arr也是指针表达式
- char *str;
- str = *parr; //*parr是指针表达式
- str = *(parr+1); //*(parr+1)是表达式
- str = *(parr+2); //*(parr+2)是表达式
复制代码
由于指针表达式的结果是一个指针,因此指针表达式也具有指针所具有的4个要素,即指针的类型、指针所指向的类型、指针指向的内存区、指针自身占据的内存。
当一个指针表达式的结果指针已经明确地具有了指针自身占据地内存时,这个指针表达式就是一个左值,否则就不是一个左值。
综合应用――使用指针进行排序
例题:输入3个不同的整数,存储在变量a、b和c中,使用指针交换,按照从大到小的顺序排序,并输出。
- #include <stdio.h>
- int main()
- {
- int a, b, c;
- int *p1 = &a, *p2 = &b, *p3 = &c, *p; //声明3个指针变量
- printf("请输入变量a, b, c\n"); //输入a和b的值
-
- scanf("%d %d %d", &a, &b, &c);
-
- if (*p1 < *p2) //当*p1小于*p2时交换
- {
- p = p1;
- p1 = p2;
- p2 = p;
- }
- if (*p1 < *p3)
- {
- p = p1;
- p1 = p3;
- p3 = p;
- }
- if (*p2 < *p3)
- {
- p = p2;
- p2 = p3;
- p3 = p;
- }
- printf("变量a的值是%d, b的值是%d,c的值是%d\n", a, b, c);
- printf("变量*p1的值是%d, *p2的值是%d,*p3的值是%d\n", *p1, *p2, *p3);
- return 0;
- }
复制代码
例题分析:
计算机内存中的每个内存由一个地址标识。通常,邻近的内存位置合成一组,这就是允许存储更大范围的值。指针的值表示内存地址。
指针变量的值并非它所指向的存储位置的值。我们必须使用间接访问来获得它所指向位置存储的值。对一个“指向整形的指针”施加间接访问的结果将是一个整型值。
声明一个指针变量并不会自动分配任何内存。在对指针执行间接访问前,指针必须进行初始化,或者使它指向现有的内存,或者给它分配动态内存。对未初始化的指针变量执行间接访问是非法的,而且这种错误常常难以检测,其结果常常是一个不相关的值被修改。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 |
|