C语言ch通过指针引用字符串
char string[] = "I love China!"; 等价于: char string[20]; strcpy(string, "I love China!"); "I love China!" 是常量字符串 const char *p; //p是指针变量,p指向的目标空间的内容不可变化 char * const p; //p是指针常量,p的值不可变,但它指向目标的值可变 while(*srcStr != '\0') 推荐=> while(*srcStr != 0) ('\0'的ASCII代码为0)=> while(*srcStr) 不推荐 [1]:char *destCopy把dest的首地址保存下来,while循环之后dest指向字符串末尾的’\0’ [2][3]:assert的作用是计算表达式 expression ,如果其值为假(即为0),那么它先向stderr打印一条出错信息,然后通过调用 abort 来终止程序运行。 使用assert的缺点是,频繁的调用会极大的影响程序的性能,增加额外的开销。 在调试结束后,可以通过在包含#include 的语句之前插入 #define NDEBUG 来禁用assert调用,示例代码如下: #include #define NDEBUG #include * * * * 上一节我们学到了 指针与二维数组 a[i]<=>*(a+i) a[i][j]<=>*(*(a+i)+j) a、a+i、*(a+i)、a[i]、*(*(a+i)+j)等怎么理解 行指针与列指针 如何定义一个指向二维数组的指针 行指针:指向一维子数组,int (*p)[10]; 列指针:指向元素,int *p; 如何向函数传递一个指向二维数组的指针 * * 第8章 善于利用指针 8.1 指针是什么 8.2 指针变量 8.3 通过指针引用数组 8.4 通过指针引用字符串 8.4.1 字符串的引用方式 8.4.2 字符指针作函数参数 8.4.3 使用字符指针变量和字符数组的比较 8.5 指向函数的指针 8.6 返回指针值的函数 8.7 指针数组和多重指针 8.8 动态内存分配与指向它的指针变量 8.9 有关指针的小结 字符指针字符串(char *string) 字符串常量 strcpy源码 * * * * 回忆字符串 一串以'\0'结尾的字符在C语言中被看作字符串 字符串常量是用双引号括起的以‘\0’结束的一串字符。 在程序开始运行时分配在全局数据区的文字常量区,存储在无名数组中。 相同字符串常量只有一个副本。 C语言表示字符串的两种表示法 字符数组 字符指针 * * 代码区(code area) 操作系统内核区 全局数据区 堆区heap 栈区stack 文字常量区 未初始化静态变量区 已初始化静态变量区 低址 数据区 字符串常量 没有初始化的全局变量和静态变量 初始化的全局变量和静态变量 malloc() free() 局部变量 函数的二进制码 内存分配 * * char[] string 例 例8.16 int main() { char string[] = "I love China!"; printf("%c\n", string[7]); printf("%s\n", string); } 运行时输出: C I love China! * * char* string 例 例8.17 int main() { char *string = "I love China!"; printf("%s\n", string); } 把存放字符串的无名数组的首地址赋给string。 char *string = "I love China!"; 等价于: char *string; string = "I love China!"; * * 练习 下面各语句中,能正确进行字符串赋值操作的语句是( ) ?① char s[5] ={"ABCDE"};??????????? ② char s[5] ={'A','B','C','D','E'}; ③ char *s;s="ABCDE";?????????? ④ char *s;scanf("%s", s); ⑤char s[8]; s = "ABCDE"; Q: printf("%s\n", "abc"+1); 输出:bc ③ * * 8.4.2 字符指针作函数参数 例8.20 用函数调用实现字符串的复制。 (1) 用字符数组作参数。 * * strcpy函数 /* Copies the string src into the spot specified by dest; ? ass