* C和指针 *
*************************************
《第一至五章》快速上手
1.1、段注释
#if 0
statement..
#endid
1.2、gets(s) puts(s),getchar(ch) putchar(ch),scanf("%S",str)区别
gets()接受输入字符串,遇到回车结束,返回!NULL,否则为NULL。
puts()与gets()是组合输出。
getchar()读取一个字符并返回它的值,如果输入不存在,返回EOF
putchar()
scanf("%S",str)接收输入字符串,以空格为输入结束
2.1、程序的风格
(1)【空行】区分不同的逻辑代码段
(2)if、相关的语句和函数原型中括号中【空格】
(3)操作符中【空格】,语句括号多时也可以不用
(4)层次嵌套代码用【Tab】
(5)注释成块出现
2.2、typedef
typedef声明,简称typedef,为现有类型创建一个新的名字,或称为类型别
名,在结构体定义,还有一些数组等地方都大量的用到。注意typedef并不创建新的类型。它仅仅为现有类型添加一个同义字。
--------------------------------------------------------------------
《第六章》指针
6.12 求字符串长度
size_t stringlen ( char *string )
{
int len = 0;
while( *string++ != '\0' ){
len++;
}
return len;
}
6.13 用指针数组置0
int array[5] = {1,2,3,4,5};
int *p;
for( p = array; p < array + 5; p++)
*p = 0;
6.14 指针和引用的区别:
(1)、指针是间接访问,引用是直接访问
(2)、指针:指向另一个内存空间的变量,我们可以通过它来索引另一个内存空间的内容,本身有自己的内存空间。
引用:是一个变量的别名,本身不单独分配自己的内存空间,共享那个变量的内存。
(3)、当你不需要“重新指向(reseating)”时,引用一般优先于指针被选用。这通常意味着引用用于类的公有接口时更有用。引用出现的典型场合是对象的表面,而指针用于对象内部。
6.18-1 strpbrk.c
/* 得到s1中第一个且是s2中字符的位置指针 */
char *my_strpbrk( char const *source, char const *chars )
{
while( *source != '\0' ){
const char *_chars = chars;
while( *_chars != '\0' ) {
if( *_chars++ == *source )
return (char*) source;
}
++source;
return 0;
}
6.18-2 strstr.c
/* 得到s1中第一次包含s2字符串的位置指针 */
char *del_substr( char *str, char const *substr)
{
if( *str == '\0' ){
if( *substr == '\0' )
return (char *) str;
return (char *) NULL;
}
while( *str != '\0'){
while( true ){
if( *substr == '\0' )
return (char *) str;
if( *substr++ != *str++ )
break;
}
str++;
}
return (char *)NULL;
}
---------------------------------------------------------------
《第八章》数组
8.1.7 声明数组参数
int strlen( char *string );
int strlen( char string[] );
传递效果一样,更加准确的是指针,sizeof(string)是指针的长度,不是数组的长度。
传递数组时不写明大小的原因:传递的是一个首地址,不需要分配空间,因为指向的地方已经分配好了空间。
8.1.11 字符数组的声明
char message[] = "hello"; //初始化一个数组元素
char *message = "hello"; //初始化一个字符串常量,指针指向字符串常量首地址
8.1.12 指针数组:数组元素全为指针的数组称为指针数组
char a[3][8]={"gain","much","strong"};
char *n[3]={"gain","much","strong"};
区别:(1)系统给数组a分配了3×8的空间,而给n分配的空间则取决于具体字符串的长度。
(2)系统分配给a的空间是连续的,而给n分配的空间则不一定连续。
(3)二维字符数组却可以通过下标很方便的修改某一元素的值,而指针数组却无法这么做
优点:(1)指针不用设置相同长度
(2)指针访问效率高

被折叠的 条评论
为什么被折叠?



