1. 指针保存的是内存地址,但是指针是有类型的,内存地址是没有类型的;
2. 指针类型的数据大小和指定的平台位数有关,指定32位系统,指针占4字节,指定64位系统,占8字节。注意:是编译器指定的位数,跟电脑系统的位数没有关系;
#include <stdio.h>
void main(){
int a = 10;
int* p = &a;
printf("int pointer size -->%d\n", sizeof(p));
printf("p-->%x\n", p);
double f =8.12;
int* fp = &f;
printf("double pointer size -->%d\n", sizeof(&f));
printf("f value -->%f\n", *fp);
printf("a -->%f\n", *&f);
getchar();
}
3. 指针和数组
数组的地址就是数组中第一个元素的首地址,a==&a[0];
#include <stdio.h>
void main(){
int a[] = { 10, 20, 30, 40 };
printf("a-->%x\n", a);
printf("a0-->%x\n", &a[0]);
int* p = a;
printf("p-->%x\n", p);
printf("a1-->%x\n", a[1]);
printf("p1-->%x\n", *(p+1));
printf("size of a %d \n", sizeof(a));
int aLenth = sizeof(a) / sizeof(int);//获取a数组的大小
for (int i = 0; i < aLenth; i++)
{
*p = 100 + i;//用指针遍历数组
p++;// 指针运算,直接跳到下一个地址,每次+sizeof(p);
}
for (int i = 0; i < aLenth; i++)
{
printf("a[%d]-->%d\n", i, a[i]);
}
getchar();
}
4.
函数指针
传入函数的地址,执行此函数
#include <stdio.h>
#define log() printf("func here %s\n", __FUNCTION__)
int add(int a, int b){
log();
return a + b;
}
int minus(int a, int b){
log();
return a - b;
}
void methodPointer(int(*func_p) (int, int),int a,int b){
printf("\nresult-->%d\n",func_p(a, b));
}
void main(){
methodPointer(add, 10, 20);
methodPointer(minus, 10, 20);
getchar();
}