char p[] 和char *p的区别
正文
char p[]和char *p
用作变量定义:
char p[]="abcd";
char *p="abcd";
可能引起重名问题。都是可以的,含义也一样。
char p[]="abcd",char *p1;
前者是一个字符数组,内存中有一定的存放字符的空间;
后者只是一个指针,里面存放了一个地址,这个地址是一个存放字符的地址。
如果它们用作函数的参数,都可以用一个数组的名称或其中某元素的地址做参数。但是前者不能改变这个数组的内容,只能引用;后者可以改变数组的内容。
例子:
1 void a(char *cmd) 2 { 3 int t; 4 char str[10]; // xxx 5 if (sscanf(cmd, "%s%u", str, &t)) 6 { 7 printf_unify("!!!test start :str = %s, t = %u\n\n", str, t); 8 my_test(t); 9 } 10 else 11 { 12 printf("-------ERROR-\n\n"); 13 } 14 } 15 void main() 16 { 17 char cmd[10] = "test 1"; 18 a(cmd); 19 }
上面的代码中 xxx 处 必须采用 char p[],而不是 char *p.因为前者是分配了内存空间的可以存放数据,后者只是指向一个数据的存放地址。
以下是错误的例子
void a(char *cmd) { int t; char *str; // xxx if (sscanf(cmd, "%s%u", str, &t)) { printf_unify("!!!test start :str = %s, t = %u\n\n", str, t); my_test(t); } else { printf("-------ERROR-\n\n"); } } void main() { char cmd[10] = "test 1"; a(cmd); }

浙公网安备 33010602011771号