C-指针
指针
每一个变量都有一个内存位置, 每一个内存位置都定义了可使用 & 运算符访问的地址, 它表示了在内存中的一个地址.
指针也就是内存地址, 指针变量是用来存放内存地址的变量.
int a = 1; int * p = NULL; p = &a; printf("变量a的地址为: %p", p); printf("内存上存储的值为: %d", *p); // *号: 间接运算符, 也叫解引用运算符, 用来获取对应地址存储的值 *p = 10; printf("变量a的值为: %d", a); // a = 10
传递指针给函数
通过引用或地址传递参数, 使传递的参数在调用函数中被改变.
#include <stdio.h> void swap_value(int* v1, int* v2) { int temp; temp = *v1; *v1 = *v2; *v2 = temp; } int main() { int a = 1, b = 10; swap_value(&a, &b); printf("a = %d, b = %d", a, b); return 0; }
从函数返回指针
允许函数返回指针到局部变量、静态变量和动态内存分配.
#include <stdio.h> #include <time.h> #include <stdlib.h> int* getRandom() { static int r[10]; int i; /* 设置种子 */ srand( (unsigned)time( NULL ) ); for (i = 0; i < 10; ++i) { r[i] = rand(); printf("%d\n", r[i]); } return r; } int main () { int *p; int i; p = getRandom(); for (i = 0; i < 10; i++) { printf("*(p + [%d]) : %d\n", i, *(p + i) ); } return 0; }
const类型
-
const
在定义指针前面, 不能通过指针改变指向变量的值int a = 1, b = 10; const int* p = &a; *p = 20; // !!!报错!!! a = 20; // 可以这样改变值 p = &b; // 可以改变指针的指向 -
const
在定义指针后面, 不能改变指针的指向int a = 1, b = 10; int* const p = &a; *p = 20; // 可以改变值 p = &b; // !!!报错!!! -
const
在定义指针的前面和后面, 兼顾以上两种int a = 1, b = 10; const int* const p = &a; *p = 20; // !!!报错!!! p = &b; // !!!报错!!!
本文作者:Khru
本文链接:https://www.cnblogs.com/khrushchefox/p/17263413.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步