「这是我参与2022首次更文挑战的第10天,活动详情查看:2022首次更文挑战」。
-
的含义:
1、乘法 2、定义指针变量 int * p;//定义了一个名字叫p的变量,int * 表示p只能存放int变量的地址。 3、指针运算符 该运算符放在已经定义好的指针变量的前面 如果p是一个已经定义好的指针变量 则 *p表示 以p的内容为地址的变量
# include<stdio.h>
f(int i,int j)
{
return 100;
}
void g(int * p, int * q)
{
*p = 1;
*q = 2;
}
int main(void)
{
int a = 3,b = 5;
// a = f(a,b);
// b = f(a,b);
g(&a,&b);
printf("%d %d\n",a,b);
return 0;
}
通过形参不能改变实参的值
如果通过被调函数修改主调函数普通变量的值
1、实参必须为该普通变量的地址
2、形参必须为指针变量
3、在被调函数中通过
* 形参名 = ......
的方式就可以修改主调函数相关变量的值。
指针和数组
数组名:
一堆数组名是个指针常量
它存放的是一维数组第一个元素的地址
下标和指针的关系
如果p是个指针变量,则
p[i]永远等价于*(p+i)
确定一个一位数组需要两个参数:
数组第一个元素的地址。
数组的长度。
指针变量的运算
指针变量不能相加 不能相乘 也不能相除
如果两个指针变量指向的是同一块连续空间中的不同存储单元,则这两个指针变量才可以相减
# include<stdio.h>
int main(void)
{
int i = 5;
int j = 10;
int * p = &i;
int * q = &j;
int a[5];
p = &a[1];
q = &a[4];
printf("p和q所指向的单元相隔%d个单元\n",q-p);
return 0;
}
一个指针变量到底占几个字节:
sizeof(数据类型)
功能:返回值就是该数据类型所占的字节数
sizeof(int) = 4
sizeof(char) = 1
sizeof(double) = 8
假设p指向char类型变量(1个字节)
假设q指向int类型变量(4个字节)
假设r指向double类型变量(8个字节)
p q r本身所占的字节数是一样的
总结:
一个指针变量,无论它指向的变量占几个字节,该指针变量本身只占4个字节。
一个变量的地址使用该变量首字节的地址来表示的。