9.1指针
9.1-1取地址运算:&运算符取得变量的地址
运算符&
- scanf(“%d”,&i);里的&
- 获取变量的地址,它们操作数必须是变量
- int i;printf(“%x”,&i);
- 地址的大小是否与int相同取决于编译器
- int i;printf(“%p”,&i);
&不能取的地址 - 不能对没有地址的东西取地址
- &(a+b) &(a++) &(++a)这些都不能取地址
试试这些& - 变量的地址
#include <stdio.h>int main()
{int a=1;printf("0x%p",&a);return 0;
}
- 相邻变量的地址
#include <stdio.h>int main()
{int a=1;int b=2;printf("0x%p\n",&a);printf("0x%p\n",&b);return 0;
}
- &的结果的sizeof
#include <stdio.h>int main()
{int a=1;int b=2;printf("0x%p\n",&a);printf("0x%p\n",&b);printf("%lu\n",sizeof((&a)));return 0;
}
- 数组的地址
- 数组单元的地址
- 相邻的数组单元的地址
#include <stdio.h>int main()
{int a[10];printf("%p\n",a);printf("%p\n",&a);printf("%p\n",&a[0]);printf("%p\n",&a[1]);
}
&数组名,数组名,数组名[0],都表示数组的首地址。
9.1.2指针:指针变量就是记录地址的变量
scanf
- 如果能够将取得的变量的地址传递给一个函数,能否通过这个地址在那个函数内访问这个变量
- scanf(“%d”,&i);
- scanf()的原型应该是怎样的?我们需要一个参数能保存别的变量的地址,如何表达能够保存地址的变量?
指针
就是保存地址的变量
int i;
int* p = &i;
int* p,q;
int p,q;
这里边的 号只是表示p是存储地址的变量,不是代表int这种类型,也没有int这种类型。
int *p=&a,应为int *p中p是要储存一个地址,所以给int *p赋值时必须是一个变量的地址
int *p,q这里边只有p是存储地址的变量,而q还是一个int型的变量。
指针变量 - 变量的值是内存的地址
- 普通变量的值是实际的值
- 指针变量的值是具有实际意义的变量的地址
作为参数的变量 - void f(int *p);
- 在被调用的时候得到了某个变量的地址;
- int i = 0;f(&i);
- 在函数里面可以通过这个指针访问外面的这个i