一,字符指针&字符数组
两者形式:
字符指针:char *p;
字符数组:char str[100];
两者区别:
字符指针p是变量;
字符数组str是常量;
访问元素方式:
字符指针:*(p+i) || p[i], 访问第i个元素;
字符数组:*(str+i) || str[i] 访问第i个元素;
利用 sizeof() 求大小:
字符指针: sizeof(p) = 4, sizeof(p)求的是指针p所占的空间,恒为4字节;
字符数组: sizeof(str) = 100, sizeof(str)求的是数组str的真实空间,100;
字符串函数strlen()说明:
strlen()仅仅求出字符串中第一个‘\0‘之前的字符个数,
printf("%s",str)只输出第一个‘\0‘之前的字符个数;
函数原型:
int strlen(char *p)
{
int count=0;
if(p==NULL)
return count;
while(*p++ != ‘\0‘)
count++;
return count;
}
简单实例:
1 #define _CRT_SECURE_NO_WARNINGS //关闭安全检查 2 #include<stdio.h> 3 #include<stdlib.h> 4 #include<string.h> 5 6 //for语句 7 int mystrlen(char* str) 8 { 9 int i = 0; 10 for (char*p = str; *p != ‘\0‘; p++) 11 { 12 i++; 13 } 14 return i;//实现字符串统计 15 } 16 17 //go语句 18 int mystrlenA(char* str) 19 { 20 char *p = str; 21 int i = 0; 22 AAA: if (*p!=‘\0‘) 23 { 24 i++; 25 p++; 26 goto AAA; 27 } 28 return i; 29 } 30 31 32 //递归实现 33 int mystrlenB(char *str) 34 { 35 if (*str==‘\0‘) 36 { 37 return 0; 38 } 39 else 40 { 41 return 1 + mystrlenB(++str); 42 } 43 44 45 } 46 47 48 49 void main() 50 { 51 char str[100] = "china is good"; 52 char *p = str; 53 char *q = malloc(sizeof(char)*50); 54 q = "hello,i am q"; 55 printf("str:%s",str); 56 printf("\nsizeof(str):%d", sizeof(str)); 57 printf("\nstrlen(str):%d", strlen(str)); 58 printf("\n\np:%s", p); 59 printf("\nsizeof(p):%d", sizeof(p)); 60 printf("\nstrlen(p):%d", strlen(p)); 61 printf("\n\nq:%s", q); 62 printf("\nsizeof(q):%d", sizeof(q)); 63 printf("\nstrlen(q):%d", strlen(q)); 64 65 printf("\n%d", mystrlen(str));//从开头第一个字符到\0字符 66 printf("\n%d", mystrlenA(str)); 67 printf("\n%d", mystrlenB(str)); 68 69 getchar(); 70 }
运行结果:

特别说明:《C Primer Plus》第五版 第10章有数组,指针,函数的详细讨论,11章详细介绍字符串·相关操作;
原文:http://www.cnblogs.com/weiyikang/p/5019009.html