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

网站做锚点新手怎样推销自己的产品

网站做锚点,新手怎样推销自己的产品,wordpress 图片采集,网页设计图片修改后是否可以商用内容提要 指针 数组指针指针数组字符数组和字符指针 指针 数组指针与指针数组 数组指针 指针和数组中符号优先级 () > [] > *通过指针引用二维数组 表现形式含义地址/值a二维数组名,指向一维数组啊a[0]2000a[0], *(a0), *a0行0列元素地址2000a1, &…

内容提要

  • 指针
    • 数组指针
    • 指针数组
    • 字符数组和字符指针

指针

数组指针与指针数组

数组指针
指针和数组中符号优先级
() > [] > *
通过指针引用二维数组
表现形式含义地址/值
a二维数组名,指向一维数组啊a[0]2000
a[0], *(a+0), *a0行0列元素地址2000
a+1, &a[1]1行首地址2008
a[1], *(a+1 )1行0列元素a[1 ] [0]的地址2008
a[1]+2, *(a+1)+2, &a[1] [2]1行2列元素a[1] [2]的地址2012
*(a[1]+2), *( *(a + 1)+2), a[1] [2]1行2列元素a[1] [2]的值元素值为13

注意:二维数组中,数组整体的地址值 = 数组中0行元素的地址值 = 数组中0行0列的地址值

在这里插入图片描述

案例

案例1

  • 需求:用指向元素的指针变脸输出二维数组的值
  • 代码:
int main()
{// 定义一个二维数组int arr[3][4] = {10,20,30,40,100,200,300,400,1000,2000,3000,4000};// 定义一个指针变量,用来接收二维数组的元素int *p = arr[0]; // 指向10的位置// 获取元素个数int len = (sizeof(arr)/sizeof(arr[0]) * (sizeof(arr[0])/sizeof(arr[0][0]));//遍历数组// 通过指针变量访问二维数组,只需要一层for循环for (; p < arr[0] + len; p++){// 每四个换行if ((p - arr[0]) % 4 == 0 && p != arr[0]) printf("\n");printf("%-6d", *p);}printf("\n");return 0}

案例2:

  • 需求:数组指针,输出二维数组任一行任一列元素的值
  • 代码:
int main()
{//定义一个二维数组int arr[3][4] = {1,3,5,7,11,33,44,77,111,333,555,777};//创建一个数组指针指向二维数组int (*p)[4] = arr; // 二维数组中的第一个元素就是首行// 创建两个变量,接收控制台输入的行和列int row, col;printf("请输入行号和列号:\n");scanf("%d,%d", &row, &col);printf("arr[%d][%d]=%d,%d,%d,%d\n", row, col, *(*(p+row)+col), (*(p+row))[col],*(p[row]+col), p[row][col]);return 0;
}
指针数组

定义:指针数组是一个数组,数组中的每一个元素都是一个指针。

特点

  • 先有指针,后有数组
  • 指针数组的本质是一个数组,只是数组中元素类型是指针。

语法:

数组类型 *数组名 [容量];

案例:

int main()
{//定义三个变量int a = 10, b = 20, c = 30;//定义指针数组,指针数组是用来存储指针的int *arr[3] = {&a,&b,&c};//获取数组大小int len = sizeof(arr) / sizeof(arr(0));//遍历数组for (int i = 0; i < len; i++){printf("%-3d", *arr[i]); // arr先和[]结合取出地址,地址再跟左侧*结合,解引用出地址对应空间的数据}printf("\n");return 0; 
}

建议:我们一般使用指针数组处理字符串。

数组指针与指针数组的区别

在这里插入图片描述

字符数组和字符指针

字符串的实现

在C语言中,表示一个字符串有以下两种方式

①数组形式:用字符数组存放一个字符串

②指针形式:用字符指针存放一个字符串

案例
#include <stdio.h>
/**
*方式1:使用字符数组实现字符串
**/
void str_test1()
{// 定义一个伪字符串char str[]= “F LOVE YOU";printf("%s\n",str);
}
/**
*方式2:使用字符指针实现字符串
**/
void str_test2()
{// 定义一个伪字符串char *str ='I LOVE YOU";printf("%s\n",str);
}
int main(int argc,char *argv[])
{str_test10;str_test20);return 0;
}

注意:字符数组和字符指针变量都是能实现字符串的存储和运算。(字符指针 —> 字符类型的指针变量)

字符数组和字符指针的联系
概念
  • 字符数组由元素组成,每个元素存放一个字符;而字符指针(变量)中存放的是地址(可以作为函数参数)
  • 只能对字符数组中的各个元素赋值,而不能用赋值语句对整个字符数组赋值。
char arr[3] = {}; // {'\0'}
arr[2] = 'A';    // 正确,对字符数组中的元素赋值arr = {'E', 'D', 'F'}; // 错误,对整个数组赋值(可以理解为数组名就是一个常量,一旦创建就无法改变))
  • 字符数组名虽然代表地址,但数组名的值不能改变,因为数组名是常量
  • 对于字符串中字符的存取,可以用下标法,也可以用指针法。
案例
int main()
{// 使用两种方式创建字符串char str1[] = "你好, 双哥哥!";char *str2 = "你好, 豪哥哥!"; // 0x11// 赋值测试// str1 = "你好,强哥哥!"; //错误,数组一旦创建就无法改变其值。str2 = "你好,帅哥哥!"; // 0x12//打印测试printf("%s,%s\n", str1,str2);// 测试从控制台获取一个字符串char *str; //此时默认值是NULL,NULL对应的空间地址0x00000000,这块空间拒绝访问printf("请输入一个字符串:\n");scanf("%s", str);printf("输出-%s\n", str); // 输出NULL// 注意:从控制台接收一个字符串只能用字符数组char a[] = "I LOVE YOU!";char *b = "I LOVE YOU!";printf("%c,%c\n%c, %c\n%s,%s\n",a[2],*(a+2),b[2],*(b+2),a+2,b+2);// L,L,L,L,LOVE YOU,LOVE YOUreturn 0;
}
字符串作为形式参数
定义
  • 实参与形参都可以是字符数组
void fun(char str[], int len){...}
void main()
{char str[] = "hello";int len = sizeof(str) / sizeof(str[0]);fun(str, len);
}
  • 实参用字符数组,形参用字符指针
void fun(char *str, int len){...}
void main()
{char str[] = "hello";int len = sizeof(str) / sizeof(str[0]);fun(str, len);
}
  • 形参和实参都是字符指针(在函数内部不能对字符串中的字符做修改
void fun(char *str, int len)
{// 在函数内部不能对字符串的字符做修改,否则报错 段错误//*(str+1) = 'E';//str[2] = 'L';printf("%s\n",str); 
}
void main()
{char *str= "hello";int len = sizeof(str) / sizeof(str[0]);fun(str, len);return 0;
}
  • 实参是指针类型,形参是字符数组
void fun(char str[], int len)
{// 在函数内部不能对字符串的字符做修改,否则报错 段错误// *(str+1) = 'E';// str[2] = 'L';printf("%s\n",str); 
}
void main()
{char *str = "hello";int len = sizeof(str) / sizeof(str[0]);fun(str, len);return 0;
}
注意

1.字符数组在创建的时候,会在内存中开辟内存空间,内存空间可以存放字符数据;字符指针在创建的时候,需要依赖于字符数组,字符指针在内存开辟的内存空间中,存放的是数组元素的地址。字符指针的创建依赖于字符数组,字符数组可以独立存在,而字符指针不能独立存在。

2.字符数组可以初始化,但是不能赋值;字符指针可以初始化,也可以赋值。

案例

案例1

  • 需求:字符指针作为函数参数:用函数调用实现字符串的复制以及长度计算

  • 代码:

/**
* 定义一个函数,实现字符串拷贝
* @param source: 拷贝的源字符串
* @param target: 需要拷贝保存字符串的目标字符串
* @param 字符串长度
*/
int str_cpy(const char *source, char **target)
{//定义一个循环变量register int i = 0;//循环遍历 sourcewhile(source[i] != '\0'){//实现拷贝*(target + i) = *(source + i); //指针法// target[i] = source[i];  //下标法t++}// 拷贝结束后,一定要给target添加\0*(target + i) = '\0';return i;
}int main()
{char source[20], target[20];printf("请输入一个字符串:\n");scanf("%s", source);//拷贝并获取长度int len = str_cpy(source, target);pritnf("字符串:%s 字符串的长度:%d", target, len);return 0;
}

案例2

  • 需求:字符指针作为函数的参数-给定一个字符串,截取start到end之间的字符串,含头不含尾
  • 代码:
/**
* 定义一个函数,实现字符串的截取、
* @param source 源字符串
* @param start  开始位置
* @param end    结束位置
* @param target 目标字符串
* @return 目标字符串长度
*/
int str_substr(char *source, int start, int end, char *target)
{// 定义循环变量(i是source的下标,k是target的下标)	register int i = 0, k = 0;// 遍历源字符串while (source[i] != '\0'){//根据start和end截取if(i >= start && i < end){*(target + k) = *(source + i);k++;}i++;}*(target + k) = '\0';return k;
}int main()
{char *str = "abcdefg";char target[26];int len = str_substr(str,2,5,target);printf("%d,%s,%d\n",str,target,len);return 0;
}
http://www.dtcms.com/wzjs/316610.html

相关文章:

  • 什么公司做网站的多腾讯广告
  • wordpress修改后台登录地址seo综合查询软件排名
  • 广州黄埔做网站的公司哪家好重庆百度关键词优化软件
  • 兰州做网站多少钱seo网站系统
  • 网站建设制作设计珠海百度搜索引擎的原理
  • 购物网站设计毕业论文seo优化外包顾问
  • 长沙手机网站公司公司网站建设需要多少钱
  • 自己做网站 搜索功能开发太原seo网站排名
  • 企业品牌网站建设我们的优势句容市网站seo优化排名
  • 给文字做网站链接网络公司seo教程
  • web前端开发的软件长沙正规seo优化公司
  • 查看网站空间网站优化公司开始上班了
  • 网站建设留言板怎么做香港seo公司
  • 广州全网推广seo搜索引擎优化工资薪酬
  • dede安装好后是模板怎么变成做好的网站企业培训师资格证
  • 云南省建设厅官方网站证书竞价推广外包托管
  • 做网站java好还是php好今日世界杯比分预测最新
  • wordpress适合做什么网站吗好项目推荐平台
  • 衡阳网站建设开发价格新十条优化措施
  • 温州手机网站制作怎么做自己的网页
  • 吕梁做网站的公司全球网站流量排名查询
  • 手机版网站图片自适应怎么做超级软文
  • jsp做网站步骤如何搜索关键词
  • 做徽章标牌的企业网站seo是干啥的
  • 重庆所有做网站的公司排名网站seo基本流程
  • 济南建设工程有限公司廊坊快速排名优化
  • 乐清网站建设服务在线葡京在线葡京
  • 龙口有没有做网站的培训方案模板
  • 网站设计网站开发深圳网站优化哪家好
  • 用mcu做灯光效果网站网站seo优化包括哪些方面