www.cnblogs.com/ruiyqinrui

开源、架构、Linux C/C++/python AI BI 运维开发自动化运维。 春风桃李花 秋雨梧桐叶。“力尽不知热 但惜夏日长”。夏不惜,秋不获。@ruiY--秦瑞

python爬虫,C编程,嵌入式开发.hadoop大数据,桉树,onenebula云计算架构.linux运维及驱动开发.

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

int find_largest(int a[],int n)
{
74

}


max = a[0];
for (i = 1;i < n;i++)
if (a[i] > max)
使用下标获取 a[0]
for (i = 1;i < n;i++)
if (a[i] > max)
 max = a[i];

return max;

通过在数组每个元素存储零  函数 修改数组

指明数组形式参数不会改变,申明中包含单词const
int find_largest(const int a[],int n)

给函数传递数组所需的时间不依赖于数组大小
给函数传递数组没有对数组进行复制  传递大数组不会产生不利
数组形式数组声明为指针

声明形式参数是数组如同声明指针
声明形式参数是数组  就如同声明它是指针 但是此不适合变量
int a[10]
编译器为0个整数预留了内存空间
int *a   

把指针像数组名一样进行标记
指针 作为数组名,数组名作为指针
*p = a;
for (i = 0;i < N;i++)
sum += p[i];

*p  间接取值   指向a  
处理多维数组的元素

C始终按照行为主顺序存储二维数组,行尾主的顺序存储二维数组  行尾主的顺序存储二维数组  先是0行元素


0 r -
使指针p指向二维数组中的第一个元素0行0列
通过重复自增p 访问到数组每一个元素
把二维数组所有元素初始化为0
int a[NUM_ROWS][NUM_COLS];
int a[NUM_ROWS][NUM_COLUMNS];
int row,columns;

for (row = 0;row < NUM_ROWS;row++)
for (col = 0;col < NUM_COLS;col++)
a[row][col] = 0;

a看成整形
int *p;
for (p = &a[0][0];p <= &a[NUM_ROWS - 1][NUM_COLS - 1];p++)// - 1 是因为数组下标计数从0 开始

循环从p指向 的a[0][0] 对p的连续自增可以使指针 p 指向a[0][1] 、a[0][2]
p达到a[0][NUM_COLS - 1] 0行的最后元素  再次对p自增使它指向a[1][0]第一行的第一个元素;
数组中的第一个元素;

处理多维数组的行    
在二维数组的一行内处理元素
二维数组的一行内处理元素最好初始化p指向数组a中i行p = &a[i][0] 第几行的第一个元素;
p = &a[i][0];

p = &a[i][0];i行的数组元素0
a[i] i行中第一个元素指针
p = &a[i][0];
p = &a[i]  指向数组i行;a[i]是指向数组a的i行指针
把a[i]
指针的 算术运算    指针的算术运算  是指向指针的数组和数组的
指向指针的数组 ++ 是 所指向的数组元素的  位置 推进 内存位置;
  用于指针算术运算要依赖指针类型标量

C标准 对于并非指向数组指针   并非指向数组的指针    指针运算 未定义的;
并非指针数组的指针  指针的运算是未定义的 着不能保证会发生意味 并不意味着 能  

PDP-11 指针算术运算会产生执行较快的程序  

char
说明声明字符串变量
字不符串变量并不等同于

既然字符串字面量作为数组存储  
数组存储
编译器 把它看作char *类型指针

数组  指针  


字符串字面量本质作为数组来存储  编译器 char *类型指针
printf()  scanf 接收char * 类型值作为他们的第一个参数


传递"abc" Address  整个数组的   字符串数组的第一个元素的内存地址;;
存储单元的指针;
传递 "abc"
允许使用char *指针的地方使用字符串字面量

char a[3] = "abc"

sizeof 计算内存变量占用字节数,依赖数据类型、机器CPU位数;
strlen 需要string.h 计算字符的 长度;
赋值操作不是复制字符 仅仅是使p指向字符串第一个字符 p指针指向字符串的第一个字符
char *p;
p = "abc";
赋值操作不是复制字符串,仅仅是p指向字符串首字符;

允许对指针添加下标,可以给字符串字面量添加下标;

指针添加下标,给字符串字面量添加下标
char ch;
ch = "abc"[1];
\\
字符串字面量字符常量
只包含一个字符的字符串字面量不同于字符常量  指针表示 指针指向存放字符内存单元
字符常量'a' 整数字符的 ASCII码表示
整数 一个指针指向字符串常量  所在内存单元
需要在


需要字符串   使用字符  
printf  期望指针作为它 的参数
申明字符串变量提供了特殊的string

字符串常量
字符串变量
声明字符串变量,C提供不同方式,只有保证字符串是以空字符结尾  任何一维数组都可以用来存储字符串
有时候很难辨别是否把字符数组作为字符串来使用;
正确字符处理空
#define STR_LEN 80  宏名称  中间  #define Macro 替换数据
typedef int newType;


#define STR_LEN 80
char str[STR_LEN + 1]
STR_LEN 强调事实是str 可以存储最多80 字符

存放字符串字符数组时,始终保证数组长度比字符串长度多一个字符   C规定每个字符串都要以空字符结尾
C函数库中函数假设字符串都是以空字符结束;
    
申明长度为STR_LEN + 1字符数组并不是意味始终包含长度为STR_LEN字符串
字符串长度取决于空字符位置
字符串长度取决空字符位置
STR_L多种长度字符串EN + 1字符数组可以存放
char date1[8] = "June 14";
char date1[8] = {'J','u','n','e',' ','1','4','\0'}

初始化比字符串变量长 C 允许初始化  不包括空字符与变量完全等同长度;

计划初始化用来放置字符串字符数组
编译器忽略空字符 数组无法作为字符串使用;
字符串变量申明忽略长度,编译器自动计算
date4的字符数组的长度没有指明  并不意味着稍后可以改变长度
初始化很长   忽略字符串变量长度
申明为数组时,可以修改存储在数组中数据
指向字符串字面量    不可以修改字符串字面量    申明字符串  变量为指针时   字符指针变量指向字符串字面量 不可以修改字符串字面量
申明数组 date数组名称  申明指针 Date是变量 变量可以在程序执行期间指向其他

字符数组  字符指针
char *date = "June 14";
char date[] = "June 14"
可以修改字符串需要建立字符数组存储字符串  指针字符变量   指针变量
需要

已经存在的字符变量
指向已经存在的字符串常量
使用未初始化的指针变量作为字符串

为了一次性读入字符串 每次一个字符
printf puts 写字符串
允许函数写字符串  转换说明
char str[] = ""
字符数组


printf逐个写入字符串字符  直到遇到空字符停止
空字符丢失 越过字符串的末尾继续读写 最终直到内存的某个地方找到
partof 只显示字符串的部分
%.ps

%ms 大小为m域内 显示字符串



函数读字符串

str数组名 自动把当制作处理

scanf跳过空白字符,读入字符,并且把读入的字符存储到str
直到遇在字符串始终会到空白字符, 末尾存储空白 字符
用scanf函数读入字符串 不会包含空白字符串 用scanf读入字符串 不包含空白   换行符会使scanf停止读入      空格符 制表
使函数停止读入;
gets不会再开始读字符串之前跳过空白字符
gets会持续读入直到找到换行符才停止      直到遇到换行  scanf 会在任意空白字符处停止
gets函数持续读入直到遇到换行符
gets 忽略换行不会把它存储到数组   用空白字符存储数组  空白字符代替换行符

char sentence[SENT_LEN + 1];
printf("Enter a sentence: \n");
scanf("%s",sentence)'
字符读入数组 都无法检测何时填满数据
越过数组的边界存储字符
转换说明%ns 指明  最大可以存储

需要的函数不会跳过空白字符, 第一个换行符   忽略额外

最大读入字符数量

int read_line(char str[],int n);
read_line返回实际存储在str

如果

int read_line
terminates string;
number of characters stored


int read_line(char str[],int n)
{
char ch;
int i = 0;
while ((ch = getchar()) ! = '\n')
if (i < n)
str[i++]
 = ch}

str['\0']


return i;


terminates string

int read_line

int read_line(char str[],int n)
{
char  ch;
int i = 0;
while ((ch = getchar()) ! = '\n')

if (i < n)
str[i++] = ch;
str[i] = '\0';
return i;
}

read_line函数在字符串末尾 放置空输入字符串的字符串 标准函数自动在
字符  可以通过测试字符是否为空字符定位字符串末尾

字符串库

strcpy字符串复制
char *strcpy(char *s1,const char *s2);
字符串  在数组中的表示判断依据是   遇到空格
空字符strcpy函数返回S1 指向目的字符串指针
不改变s2指向  申明const 常量;
strcpy能使用  运算符复制字符串
数组名不能出现在赋值运算的左侧

char *strcpy(char *s1,char *s2);
函数把字符串s2复制给字符串s1 strcpy函数把s2指向的字符串复制到S1指向的数组
s2中字符串复制到哦S1 直到遇到s2中的一个空字符停止
strcpy返回S1 指向目的字符串指针
空字符
   空格;
strcat   strcpy
字符串拼接
char *strcat(char *s1,const char *s2);
strcat把字符串s2的内容追加到字符串s1的末尾,并且返回字符串s1 指向结构字符串的指针

posted on 2016-08-31 14:24  秦瑞It行程实录  阅读(301)  评论(0编辑  收藏  举报
www.cnblogs.com/ruiyqinrui