*的含义:
- 乘法
- 定义指针变量,如int*p//定义了一个名为P的变量,int*表示P只能存放Int变量的地址。
- 指针运算符:该运算符放在已经定义好的指针变量的前面。*p表示以p的内容为地址的变量
如何通过被调函数修改主调函数普通变量的值
- 实参必须为该普通变量的地址
- 形参必须为指针变量
- 在被调函数中通过 “ * 形参名=......” 的方式修改主调函数相关变量的值
如:
void g (int*p,int*q)
{
*p=1;
*q=2;
}
int main(void)
{
int a=3,b=5;
g(&a,&b);
printf("%d %d\n",a,b);
return 0;
}
指针和数组
1.指针和一维数组
- 一维数组名:是指针常量,存放的是一维数组第一个元素的地址
- 下标和指针的关系
如果p是一个指针变量,则p[i]永远等价于*(p+i)。
确定一个一维数组需要几个参数(如果一个函数要处理一个一维数组,则需要接受该数组的哪些信息)
(1)数组第一个元素的地址(首地址)
(2)数组的长度
- 指针变量的运算
指针变量不能相加,不能相乘,不能相除。
如果两个指针变量指向的是同一块连续空间中的不同存储单元,则这两个指针才可以相减,比如数组
- 一个指针变量到底占几个字节
假设p指向char类型变量(1个字节)
假设q指向int类型变量(4个字节)
假设r指向double类型变量(8个字节)
p q r本身所占的字节数是否一样?
答案:p q r本身所占的字节数是一样
一个指针变量,无论它指向的变量占几个字节,该指针变量本身只占4个字节
一个变量的地址使用该变量首字节的地址表示。