当前位置: 首页 > news >正文

网站建设精品课程成都购房登记入口官网

网站建设精品课程,成都购房登记入口官网,稿定设计网站官网入口,成都网络推广一、字符串与指针用字符指针指向一个字符串,可以不定义字符数组,而定义字符指针。用字符指针指向字符串中的字符。不能使用指针去改变不能修改的空间。eg1. 运用指针将 src 的内容拷贝到 dest 中去void Strcpy(char *dest, char *src) {while(*src ! \0)…

一、字符串与指针

        用字符指针指向一个字符串,可以不定义字符数组,而定义字符指针。用字符指针指向字符串中的字符。不能使用指针去改变不能修改的空间。

eg1. 运用指针将 src 的内容拷贝到 dest 中去

 

void Strcpy(char *dest, char *src)
{while(*src != '\0'){*dest = *src;++dest;++src;}*dest = '\0';
}

eg2. 运用指针将 src 的内容剪切到 dest 后面

void Strcat(char *dest, const char *src)
{while(*dest){*dest = *dest;++dest;}while(*src){*dest = *src;++dest;++src;}*dest = '\0';
}

eg3. 运用指针比较 s1 与 s2 的大小

int Strcmp(const char *s1, const char *s2)
{while(*s1 == *s2 && *s1 != '\0' && *s2 != '\0') {++s1;++s2;}return *s1 - *s2; 
}

eg4. 运用指针将 src 的前 n 个字符拷贝到 dest 中去

//将src的前n个字符拷给dest中去
void Strncpy(char *dest, const char *src,int n)
{while(*src != '\0' && n-- != 0 ){*dest = *src;++dest;++src;}//*dest = '\0';
}

eg5. 运用指针将 src 前 n 个字符连接到 dest 的后面去

void Strncat(char *dest, const char *src, int n)
{while(*dest){++dest;}while(*src && n--){*dest++ = *src++;}*dest = 0;
}

eg6. 运用指针只比较 s1 与 s2 的前 n 个字节的大小(可用于查找子串)

int Strncmp(const char *s1, const char *s2, int n)
{while(--n && *s1 == *s2 && *s1 && *s2)// --n{++s1;++s2;}return *s1 - *s2;
}

上述函数在主函数中的运行格式:

int main(void)
{char s1[100] = "Hello ";char s2[100] = "Herld!";Strcpy(s2, s1);Strcat(s1,s2);//Strcat(s1, "World");Strncpy(s1, s2, 2);Strncat(s1, s2, 2);//puts(s1);int t = Strncmp(s1, s2, 2);printf("%d\n", t);return 0;
}

二、万能指针(空指针)

        万能指针可以用来接收任何数据类型的指针,当多个函数的运行程序段一致,但函数形参类型不一致时,可用万能指针结合强制类型转换符进行合并。

        例如,只将 src 空指针型数组中的前 n 个数据拷贝到 dest 空指针型数组中去(适用于任何数据类型的拷贝)

//万能指针
void Memcpy(void *dest, const void *src, int n)
{char *q = (char *)dest;char *p = (char *)src;while(n--){*q++ = *p++;}
}
int main(void)
{short a[10] = {1,2,3,4,5,6,7,8,9,0};short b[10];int len = sizeof(a) / sizeof(*a);Memcpy(b, a, sizeof(a));int i;for(i = 0; i < len; ++i){printf("%d\n", b[i]);}return 0;
}

三、查找子串

        运用 Strncmp 函数查找 sub 在 s 中首次出现的位置

int subString(const char *s, const char *sub)
{int i;//printf("%d\n",strlen(s));for(i = 0; i <= strlen(s) - strlen(sub); ++i){if(strncmp(s + i, sub, strlen(sub)) == 0){break;}        }if(i > strlen(s) - strlen(sub)){return 0;}else{return i;}
}
int main(void)
{char *sub = "hand";char *s = "He is handsome";int ret = subString(s, sub);if(ret != 0){printf("found\n");printf("在s[%d]\n", subString(s, sub));}else{printf("not found\n");}return 0;
}

四、一维数组指针

        一维数组指针也称为指向一维数组元素的指针,本质是一个指针变量。

        一般形式:数据类型 (*标识符)[一维数组长度]

例如:int (*p)[10]:长度为10的一维整型数组,对指针 p 加 n 表示: 偏移 n*sizeof(基类型) 个字节。

五、二维数组指针

       1、概念

         二维数组指针也称为指向二维数组的指针或数组指针,其作为函数参数传递的媒介,形参是指向一维数组的指针,是一种特殊的指针类型,用于指向二维数组的整体或其行、元素,实现灵活的数组访问和传递。

        (1) 指向二维数组的行(以下皆用 p 当作二维数组 a[][4] 的指针)

                int (*p)[4]=a  <=等价于=> a[0]

        (2) 指向二位数组的 i 行 j 列

                *(*( a+ i) + j)  <=等价于=> a[i][j]

                例如:*(*(a + 1) + 1)  <=表示=> 二维数组中 a[1][1] 的值

        2、二维数组指针的输出

void printArray2D(int (*a)[4], int rows)
{int i, j;int cols = sizeof(*a) / sizeof(**a);for(i = 0; i < rows; ++i){for(j = 0; j < cols; ++j){printf("%2d ", *(*(a+i)+j));}puts("");}
}

        3、二维数组指针的求和

int sumArray2D(int (*a)[4], int rows)
{int i, j;int sum = 0;int cols = sizeof(*a) / sizeof(**a);for(i = 0; i < rows; ++i){for(j = 0; j < cols; ++j){sum += *(*(a + i) + j);}}return sum;
}

        4、二维数组指针的水平镜像

//a与b的交换
void swap(int *a, int *b)
{int t;t = *a;*a = *b;*b = t;
}
//一维数组的逆序
void reverse(int *begin, int *end)
{while(begin < end){swap(begin++, end--);}
}
//二维数组的水平镜像
void reverse2D(int (*a)[4], int rows)
{int i, j;int cols = sizeof(*a) / sizeof(**a);for(i = 0; i < rows; ++i){reverse(*(a + i), *(a + i) + (cols -1));}
}

上述函数在主函数中的使用格式:

int main(void)
{int a[][4] = {1,2,3,4,5,6,7,8,9,10,11,12};int rows = sizeof(a) / sizeof(*a);int t = sumArray2D(a, rows);printArray2D(a, rows);//printf("%d\n", t);reverse2D(a, rows);printArray2D(a, rows);return 0;
}

可以运用强制类型转换符改变指针输出类型,例如:

        printf("%d\n", *( (int *)(p + 3) - 5) ),对于三行四列的二维数组a[3][4],该输出指向 a[1][3] 中的值。

六、返回指针值的函数

        一般定义形式:类型名 *函数名(参数列表)

        返回指针值的函数称为指针函数。一个函数可以返回一个整型值、字符值、实型值等,也可以返回指针型的数据,即地址。可应用到多种函数的创建中去,例如字符型数组的拷贝(eg1. )、字符型数组的剪切(eg2.)。

eg1. 将 src 字符串的内容拷贝到 dest 字符串中去,要求函数须有返回值,并在输出时直接打印出结果

char *Strcpy(char *dest, const char *src)
{char *ret = dest;while(*src){*dest++ = *src++;}*dest = '\0';return ret;
}

eg2. 将 src 字符串的内容粘贴到 dest 字符串的后面,要求函数须有返回值,并且输出时直接打印出结果

char *Strcat(char *dest, const char *src)
{char *ret = dest;while(*dest){++dest;}while(*src){*dest = *src;++dest;++src;}return ret;
}

以上函数在主函数中的运行的书写格式 

该类函数不能返回局部变量的值,例如:

static int i;
return &i;
*foo(&i) = 100; // * 为取地址

需要在变量 i 前加上 static ,让其存储与静态区(全局区)。

七、关键字 const

        在指针前加 const 表示无法通过该指针去修改它所指向的变量,但指针本身可以指向其他地址。可以提高代码可读性和函数的传参效率。常用于不能修改的字符指针前。例如:

int a = 10;
int b = 20;
const int *p = &a;

若执行" *p = 20 ",会编译错误,不能通过 p 修改所指向的值;

若执行“ p = &b ”,可以执行,指针 p 可以指向其他地址。

http://www.dtcms.com/a/560331.html

相关文章:

  • 网站制作设计多少钱解读网站建设
  • 网站优化的要求手机怎么编辑网页
  • wordpress登录可见seo刷词工具在线
  • 网站301重定向检测合肥企业网站
  • 网站建设买了域名网站建设 专项资金变更
  • 企业网站建设个人博客空间商网站
  • 免费空间网站php怎么在网站上做seo
  • 做网站大图片什么是oa系统
  • 做音乐网站需要版权么地图网站怎么做
  • 化妆品产品的自建网站哟哪些网站建设后台管理怎么进入
  • 用织梦做的网站ftp怎么登陆wordpress网站维护中
  • 苏州哪里做网站开封市建设中专网站
  • 辽宁省住房和城乡建设部网站主页网站建设定义是什么
  • 兰州建设厅评职称网站检察院网站建设标书
  • thinkphp 显示第三方网站图片怎样看网站建设制作方
  • 成都网站seo收费标准图片加字在线制作
  • 广州seo优化代理兰州网站seo
  • 湛江模板建站多少钱做温泉机的企业网站
  • 做网站买什么服务器 便宜用什么语言能写网站吗
  • 手机搭建网站教程视频哪些网站可以注册邮箱
  • 团购网站开发需要多久内蒙古网站建设百度
  • 给你一个网站你怎么做的怎么做个小程序
  • 烟台做网站那家好重庆欧勒精细有限公司网站策划书
  • 物流网站给做软件下载网页设计与制作教程游戏页面
  • 网站弹出信息怎么做的新东方线下培训机构官网
  • 网站建立分站加强网站微信公众号平台建设
  • 企业宣传网站建设模板怎么上网做网站
  • 网站用户粘性北京住房和城乡建设部官方网站
  • 律师网站设计中国小康建设网是骗子网站吗?
  • 上海智能网站建设如何做营销型手机网站优化