1. 指针基本介绍
/*
============================================================================
Name : Pointer.c
Author : jiangkuan
Version :
Copyright : Your copyright notice
Description : Hello World in C, Ansi-style
============================================================================
*/
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
int main(void) {
int a = 10;
int *pa = &a;
printf("%d\n",*pa);
int32_t *intP = malloc(4);
//*intP = 100;
intP[0] = 100;
printf("%d\n",*intP);
int len = 10;
int32_t * intQ = malloc(len*sizeof(int32_t));
intQ[0] = 101;
intQ[1] = 103;
printf("%d\n",*(intQ+1));
printf("%x\n",intQ);
printf("%x\n",&intQ);
char *str = "hello";
printf("%ld\n",sizeof(str));
int64_t p = (int64_t)str;
char *str1 = (char *)p;
printf("%s\n",str1);
puts("!!!Hello World!!!"); /* prints !!!Hello World!!! */
return EXIT_SUCCESS;
}
运行结果:
2. 函数指针
/*
============================================================================
Name : Functionpointer.c
Author : jiangkuan
Version :
Copyright : Your copyright notice
Description : Hello World in C, Ansi-style
============================================================================
*/
#include <stdio.h>
#include <stdlib.h>
void hello(){
printf("!!!Hello World!!!\n");
}
void helloOne(int a,int b,char * c){
printf("!!!Hello World one!!!\n");
}
typedef void(*SimpleFunc)();
int main(void) {
//hello();
void(*fp)() = &hello;
fp();
void(*fp1)(int,int,char*) = &helloOne;
fp1(1,2,"a");
SimpleFunc fp2 = &hello;
fp2();
return EXIT_SUCCESS;
}
运行结果:
3. 无类型指针
/*
============================================================================
Name : VoidPointer.c
Author : jiangkuan
Version :
Copyright : Your copyright notice
Description : Hello World in C, Ansi-style
============================================================================
*/
#include <stdio.h>
#include <stdlib.h>
int main(void) {
void *data = "hello void";//无类型指针可以指向任意类型的数据
printf("%s\n",data);
void *data1 = malloc(8); //无类型指针访问的单元是一个字节一个字节的访问
//data1[0] = 10; 报错,int数据的类型不能放到一个字节里面
printf("%ld\n",sizeof(data1[0]));
int *intData = data1;
printf("%ld\n",sizeof(intData[0]));
intData[0] = 10000;
printf("%d\n",intData[0]);
free(data1); //使用malloc分配了内存,不使用的时候要free掉
return EXIT_SUCCESS;
}
运行结果: