C指针

发布于 2024-06-03  98 次阅读


指针变量的定义

  • *修饰指针变量
  • 保存谁的地址 就先定义谁
  • 从上往下整体替换 变量名
*p
int num
int *p
目的实现
定义指针变量 保存int arr[5]的首地址int (*p)[5];
定义指针变量 保存int fun(int, int)的入口地址int (*p)(int, int);
定义指针变量 保存struct stu lucy的地址 struct stu *p;

指针变量的类型

  • 自身的类型:将指针变量名拖黑,剩下啥类型,指针变量自身就是啥类型
  • 指向的类型:将指针变量名和离它最近的一个*一起拖黑,剩下啥类型指针变量指向就是啥类型
例子自身类型指向类型
int **p;int **int *
int (*p)(int, int);int (*)(int, int)int fun(int, int)

一个奇怪但正确的论证

  • []是*()的缩写:A[B] == *(A+B)
  • arr[1] == *(arr+1) == *(1+arr) == 1[arr]
  • 为什么arr作为地址 代表的是第0个元素的地址
  • &arr[0] == &*(arr+0) == arr+0 == arr

字符串与指针

char str[] = "hello";
//"hello"存放在str字符数组中,如果是局部数组,str在栈区;是全局数组,str在全局区;
str[0] = 'H'; 
// 合法

char *str = "hello";
//str是指针变量(栈区/全局区)占4字节 保存字符串"hello string"的首元素地址
//字符串"hello"本身存储在文字常量区(只读)
str[0] = 'H'; 
// 非法,可能导致未定义行为
最后更新于 2024-06-27