指针_C
指针的代码
// Code file created by C Code Develop #include "ccd.h" #include "stdio.h" #include "stdlib.h" // #include "waibu.c" #include "string.h" int main(int argc, char **argv) { int i = 10; char c1 = 'A'; double d = 100.56; // 一、变量的地址 // 输出内存地址的格式控制符是 %p 地址采用十六进制的数字显示 printf("变量i的地址是:%p\n", &i); printf("变量c1的地址是:%p\n", &c1); printf("变量d的地址是:%p\n", &d); //二、指针 int *ip; // 一个整形的指针 char *cp; // 一个字符型的指针 double *dp; //三、对指针赋值 // 用整数型指针存放整数型变量的地址 //用字符型指针存放字符型变量的地址 //用双精度型指针存放双精度型变量的地址 //自定义的数据类型指针存放自定义数据类型变量的地址 // 把指针指向具体的内存变量地址,就是指针赋值 int ii = 10; char cc = 'A'; double dd = 100.56; int *pii = 0; char *pcc = 0; double *pdd = 0; pii = ⅈ // 整数型指针 并 指向变量ii; int sii = 0x149f8c388; printf("pii 的值是%p \n", pii ); printf("sii的值是%p \n", sii); printf("的值是\n" ); // 四、通过指针操作内存变量 /* 定义并指向变量 内存地址的 指针变量, 就可以通过指针操作内存变量操作。 效果与使用变量名相同 */ int i4 = 10; int *pi4 = 0; //定义整数型指针并初始化 pi4 = &i4; // 整数型指针变量pi4. &是操作符号 取地址 // 通过指针操作内存变量,改变内存变量的值 *pi4 = 20; // 同i4=20; /* 指针变量pi4 pi4 存放的是 i4 的地址 *pi4 是寻找 i4 存放的的值 */ printf("pi4的值是%p\n", pi4); printf("*pi4的值是:%d \n", *pi4); printf("&pi4的值是:%d \n", &pi4); printf("i4的值是:%d \n", i4); // pi4 = pi4 -> i4; // printf("%d", *pi4 ); char c = 'B'; char *cr = 0; cr = &c; *cr = 'C'; printf("c的值是:c% \n", c); printf("*cr的值是:c% \n", *cr); printf("cr的值是:%p \n", cr); printf("&cr的值是:%p \n\n", &cr); // 五、函数参数的传递 int qq = 10; printf("位置一:a是一个变量,地址是%p,a的值是%d \n", &qq, qq); funcl(&qq); printf("位置二:a是一个变量,地址是%p,a的值是%d \n", &qq, qq) //七、数组的地址 /* 数组占用的内存空间是连续的, 数组名==数组元素的首地址==数组的地址。 */ char name[51]; strcpy(name, "C语言技术网"); printf("%p\n", name); printf("%p\n", &name ); printf("%p\n", &name[0] ); printf("%s\n", name ); printf("%s\n", &name ); for(int j = 0; j < (sizeof(name) /sizeof(name[0])); j++) { printf("%s\n", &name[j] ); } // 八、地址的运算 char ccc[4]; // 字符数组 int iii[4]; // 整数数组 double ddd[4]; // 浮点数组 memset(ccc, 0, sizeof(ccc)); char *pccc = ccc; memset(iii, 0, sizeof(iii)); memset(ddd, 0, sizeof(ddd)); // 用地址相加的方式显示数组全部元素的的址w printf("%p", ccc ); printf("%p", pccc + 1); // 以下通过数组常量+1访问地址的方法都是错的,只能定义指针变量,来递增访问 // printf("%p %p %p %p\n", ccc, ccc + 1, ccc + 2, ccc + 3); //printf("%s %s\n", name, name + 1); // printf("%p %p %p %p\n", iii, iii + 1, iii + 2, iii + 3); // printf("%p %p %p %p\n", ddd, ddd + 1, ddd + 2, ddd + 3); /* 第一行输出的每个地址的增量是1, 第二行的每个地址的增量是4, 第三行的每个地址的增量是8,为什么会这样? 因为数组cc是char型,一个存储单元是1个字节, 数组ii是int型,一个存储单元是4个字节, 数组ll是long型,一个存储单元是8个字节, 地址加1指的是下一个存储单元,不是数学意义中的1。 详见字符串章节。 */ // 九、指针占用内存情况。 /*任何类型的指针占用八字节;*/ printf("sizeof(int *) is %d.\n", sizeof(int *)); // 输出:sizeof(int *) is 8 printf("sizeof(char *) is %d.\n", sizeof(char *)); // 输出:sizeof(char *) is 8 printf("sizeof(double *) is %d.\n", sizeof(double *)); // 输出:sizeof(double *) is 8 //十、其他--函数指针、指针的指针 return 0; } void funcl(int *p) { printf("位置三:p是一个指针 % p,指向的变量值是 % d \n", p, *p); *p = 20; printf("位置四:p是一个指针 % p,指向的变量值是 % d \n", p, *p); }
本文来自博客园,转载请注明原文链接:https://www.cnblogs.com/WG11/p/15340198.html,作者:def_Class