- CPU 访问内存时需要的是地址,而不是变量名和函数名!变量名和函数名只是地址的一种助记符,当源文件被编译和链接成可执行程序后,它们都会被替换成地址。编译和链接过程的一项重要任务就是找到这些名称所对应的地址。
- 变量名表示的是数据本身,而函数名、字符串名和数组名表示的是代码块或数据块的首地址。
- 指针变量:如果一个变量存储了一份数据的指针(地址)
- int a = 100;
- int *p_a = &a;
&
,否则是不对的。*
,给指针变量赋值时不能带*
。![](https://img2023.cnblogs.com/blog/3014969/202304/3014969-20230415152810771-2010775992.png)
如果pa++,则:
// 数组名可以认为是一个指针,它指向数组的第 0 个元素
int arr[] = { 99, 15, 100, 888, 252 }; int len = sizeof(arr) / sizeof(int); //求数组长度 int i; for(i=0; i<len; i++){ printf("%d ", *(arr+i) ); //*(arr+i)等价于arr[i] }
// 我们使用了*(arr+i)
这个表达式,arr 是数组名,指向数组的第 0 个元素,表示数组首地址, arr+i 指向数组的第 i 个元素,*(arr+i) 表示取第 i 个元素的数据,它等价于 arr[i]。