C语言指针的用法

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;
}

运行结果:




猜你喜欢

转载自blog.csdn.net/qq_32639315/article/details/80552532