c语言指针-简要
来源:互联网 发布:js中a标签的href路径 编辑:程序博客网 时间:2024/06/05 07:17
- 指针的类型一般按照其指向数据的类型来划分
int *a; //整型指针char *b; //字符型指针float *c; //浮点型指针struct A *d;//特殊类型指针
- 虽然指针的类型有很多,但指针的大小是固定的(和编译器有关)一般有32和64位即4个字节或8个字节。在64位的编译其中,指针所占用的空间即为64位。一般情况下指针和int类型占有相同的空间,所以指针和int类型可以相互转换
int *a; //整型指针char *b; //字符型指针float *c; //浮点型指针struct A *d;//特殊类型指针printf("%d, %d, %d, %d, %d\n", sizeof(a), sizeof(b), sizeof(c), sizeof(d), sizeof(int));//打印结果为 4,4,4,4,4(假设编译器为32位的)
- 指针可以指向任何地方:如变量,函数,参数,所有程序中的东西,甚至系统中任何地方如内存地址,硬件设备(打印机,摄像头)等
- 指针移动的步长为指针所指向的数据类型所占用的内存大小
char buf[1024];char *a = buf;int *b = (int *)buf;a += 8;b += 2;if((int)a == (int)b) {//指针转换成整数 printf("a == b, %u == %u\n", (int)a, (int)b); //此部分会被打印出来}*b = 0x01020304;printf("%d, %d, %d, %d\n", *a, *(a + 1), *(a + 2), *(a + 3)); //会打印4,3,2,1(假设整型数据低字节排序)
- 数组就是指针:就原理上来说数组和指针是一样的。
char buf[1024];char *a = buf;int *b = (int *)buf;a += 8; b += 2;if((int)a == (int)b){ printf("a == b\n"); //此部分会被打印出来 }if((int)(buf + 8) == (int)b) { printf("buf + 8 == b, %08x == %08x\n", (int)(buf + 8), (int)b); //此部分会被打印出来}*b = 0x01020304;printf("%d, %d, %d, %d\n", *a, *(a + 1), *(a + 2), *(a + 3)); //会打印4,3,2,1(假设整型数据低字节排序)printf("%d, %d, %d, %d\n", buf[8], buf[8 + 1], buf[8 + 2], buf[8 + 3]); //会打印4,3,2,1(假设整型数据低字节排序)printf("%d, %d, %d, %d\n", *(buf + 8), *(buf + 8 + 1), *(buf + 8 + 2), *(buf + 8 + 3)); //会打印4,3,2,1(假设整型数据低字节排序)int *c = (int *)a;printf("0x%08X\n", *c); //会打印0x01020304(假设整型数据低字节排序)
- 字符串是数组:元素为字符且以‘\0’为结尾。待续
- example.c
#include <stdio.h>#include <string.h>#define printf(format, arg...) fprintf(stdout, "%s, "format, __FUNCTION__, ##arg)void testPointSize() { int *a; //整型指针 char *b; //字符型指针 float *c; //浮点型指针 struct A *d;//特殊类型指针 printf("%d, %d, %d, %d\n", sizeof(a), sizeof(b), sizeof(c), sizeof(d));//打印结果为 4,4,4,4(假设编译器为32位的)}void testString() { //本函数只做测试,实际上是很危险的 int test(char s[]) { //这么写不知到会不会被人打死 char a[13]; strcpy(s, "hello"); printf("%d, %d, %d, %d\n", sizeof(s), sizeof(a), strlen(s), strlen(a)); //可以看出,数组做形参时是没有实际大小的,打印出的是指针的大小4 return 0; }; char a[12];// = {0};// = "ld"; int a1; printf("%d, %d\n", strlen(a), a1); test(a); printf("%d\n", strlen(a));}void testPoint() { char buf[1024]; char *a = buf; int *b = (int *)buf; a += 8; b += 2; if((int)a == (int)b) { printf("a == b\n"); //此部分会被打印出来 } if((int)(buf + 8) == (int)b) { printf("buf + 8 == b\n"); //此部分会被打印出来 } *b = 0x01020304; printf("%d, %d, %d, %d\n", *a, *(a + 1), *(a + 2), *(a + 3)); //会打印4,3,2,1(假设整型数据低字节排序) printf("%d, %d, %d, %d\n", *(buf + 8), *(buf + 8 + 1), *(buf + 8 + 2), *(buf + 8 + 3)); //会打印4,3,2,1(假设整型数据低字节排序)}int main() { testString(); //testPointSize(); //testPoint(); return 0;}
0 0
- c语言指针-简要
- c语言中 指针和一维数组 简要总结
- c语言学习的简要笔记
- C语言输入输出函数的简要介绍
- C语言写CGI 程序简要指南
- 数据结构之简要介绍C语言
- C语言中的指针
- C语言指针问题
- C语言野指针
- C语言之指针
- C语言指针简介
- C语言的指针
- c语言指针点滴
- C语言的指针
- c语言指针简介
- c语言 数组 指针
- c语言指针详解
- 理解C语言指针
- hdu2669 扩展欧几里得
- FZUoj 2020 组合 (组合数学&&Lucas定理)
- CentOS 上php环境搭建
- 蓝桥杯 算法训练 出现次数最多的整数
- 排序算法应用
- c语言指针-简要
- getattr
- Android判断ListView滚动到最顶部第0条item完全完整可见及最底部最后一条item完全完整可见
- JavaScript- 图表库Highcharts
- Prim算法 Kruskal算法 Dijstra算法 Floyed算法
- Docker与JVM性能对比实验设计
- Kafka:下一代分布式消息系统
- day03 homework
- arclist 调用附加字段