首页IT科技c语言字符串指针数组(指针和数组、字符串 | C语言教程 | C语言系列教程)

c语言字符串指针数组(指针和数组、字符串 | C语言教程 | C语言系列教程)

时间2025-05-04 10:54:53分类IT科技浏览4211
导读:一、数组和指针的关系 下面仍然是初学者容易搞错的地方。指针变量加n或减n,并不是地址加n或减n,而是当前所指的地址向后或向前跳n次所指的地址。...

一            、数组和指针的关系

下面仍然是初学者容易搞错的地方            。指针变量加n或减n            ,并不是地址加n或减n                  ,而是当前所指的地址向后或向前跳n次所指的地址                  。

#include <stdio.h> int main(void) { int num[] = {50, 25, 75, 100}; int *pt; pt = num + 1; //故意将第2个元素地址赋给指针变量 //显示指针变量所指的地址以及指针的值 printf("pt =%d, *pt =%d\n\n", pt, *pt); //当指针变量减1或加1时      ,所指的地址并不减1或加1            ,而是加减4                  ,因为int4个字节 printf("pt-1=%d, *(pt-1)=%d\n", pt-1, *(pt-1)); printf("pt =%d, *pt =%d\n", pt, *pt); printf("pt+1=%d, *(pt+1)=%d\n", pt+1, *(pt+1)); //显示pt当作数组用时的值      。(注意:[-1]仍然是正确的) printf("\npt[0]=%d, pt[-1]=%d\n", pt[0], pt[-1]); return 0; }
二                  、指针数组

char型的指针数组相当于二维字符数组      ,并不等于说指针数组可以直接转化为二为字符数组      ,相反字符数组可以直接转化为指针数组            。因为二维字符数组的地址是连续的                  ,而指针数组所指的元素不一定连续(如下的m1      、m2            、m3的地址可以不连续            ,长度也可以不一样)                  。

#include <stdio.h> int main(void) { char *m1 = "www.quanxue.cn"; char *m2 = "www.51minge.com"; char *m3 = "这儿是小雅的C语言教程"; char *message[3]; //| #include <stdio.h> int i; //| //| int main(void) message[0] = m1; //| { message[1] = m2; //| char *message[] = {"www.quanxue.cn", message[2] = m3; //| "www.51minge.com", //| "这儿是小雅的C语言教程"}; for (i=0; i<3; i++) { //| for (i=0; i<3; i++) { printf("%s\n", message[i]); //| printf("%s\n", message[i]); } //| } //| return 0; //| return 0; } //| }
三                  、指向指针的指针

在第一章讲main()函数的参数时      ,已经见过指针的指针                  ,这和指针数组有相同的作用            ,但还是有细小的区别      。指针数组可以在定义时直接初始化,而指向指针的指针不行      。正如二维数组一样                  ,不指定第二维长度不能直接初始化一样                  。即不能char str[][]={"...", "...", ...}

#include <stdio.h> int main(void) { char *message[] = {"www.quanxue.cn", "www.51minge.com", "这儿是小雅的C语言教程"}; char **p; //指向指针的指针 int i; p = message; //指向指针的指针赋初值 for (i=0; i<3; i++) { printf("%s\n", p[i]); } return 0; }
四      、指针的长度

让许多初学者遗憾的是                  ,C语言没有提供数组长度的函数,但可以用sizeof()运算符先求数组的总长度            ,再求出数组类型的长度                  ,二者相除便得到数组的长度            。C语言更大的一个遗憾便是      ,sizeof()对指针变量求值时            ,结果总是4                  ,这是因为指针变量的内容是地址      ,地址总是4个字节来表示      。

因此有经验的编程人员      ,在用指针作参数时                  ,一般总是同时多定义一个参数            ,来存放其长度                  。也就是指针和其长度同时传递过去            。另外      ,数组长度如果事先知道                  ,一般定义为常量。

#include <stdio.h> int main(void) { char *msg[] = {"www.quanxue.cn", "www.51minge.com", "这儿是小雅的C语言教程"}; double dNum[] = {12.5, 24.55, 100.83}; double *p = dNum; printf("dNum的size:%2d, 数组个数是:%d\n", sizeof(dNum), (int)sizeof(dNum)/sizeof(double)); printf(" p的size:%2d, 数组个数是:%d\n", sizeof(p ), (int)sizeof(p )/sizeof(double)); printf(" msg的size:%2d, 数组个数是:%d\n", sizeof(msg ), (int)sizeof(msg )/sizeof(char *)); return 0; }
声明:本站所有文章            ,如无特殊说明或标注,均为本站原创发布                  。任何个人或组织                  ,在未征得本站同意时                  ,禁止复制      、盗用                  、采集            、发布本站内容到任何网站      、书籍等各类媒体平台                  。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
火车头采集器是干嘛的(新技巧揭秘:APP教你如何火车头采集图片只采一张) rust文件读写 方法大全(文盘Rust — 领域交互模式如何实现)