char*p char p【】 有什么区别?

usr_src 2009-07-12 11:22:25
char *p 和char p【】有什么区别啊??
...全文
220 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhulei632 2009-11-28
  • 打赏
  • 举报
回复
二者作为函数参数时,一般来说都可以将一个数组传进被调函数,

char *p ="abcd";
void fun(char *p)

char p[]="abcd";
void fun(char p[])

但是,当你要在函数fun内部直接修改数组p中的元素时,你就知道差别了.
前者是不可以的因为 char *p 指向了一个字符串常量,而常量是不允许被更改. 所以不行的.
================================================
又但是,上述特例仅限于char*指针,对int double等 两种定义数组的方法都成立.

附上我的测试代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void LoopMove(char * pStr,int steps) //字符串循环右移n个
{
int len = strlen(pStr);
char *tmp = malloc(len*2);
strcpy(tmp, pStr+len-steps);
strcpy(tmp+steps, pStr);
*(tmp+len) = '\0';
strcpy(pStr, tmp); //试图改变pStr的值
free(tmp);
}

//void changeValue(int *a) //ok
//{
// a[1] = 1000;
// }

void changeValue(int a[]) //ok
{
a[1] = 1000;
}

int main()
{
char pstr[] = "abcdefghi"; //ok!
//char *pstr = "abcdefghi"; //error!

int *a = malloc(sizeof(int)*10); //ok!
//int a[10] = {0}; //ok!

printf("%s\n", pstr);
LoopMove(pstr, 4);
printf("%s\n", pstr);

changeValue(a);
printf("%d \n", a[1]);
return 0;
}

jsxdihao 2009-07-12
  • 打赏
  • 举报
回复
支持六楼的。
billow_zhang 2009-07-12
  • 打赏
  • 举报
回复

char *p 定义了一个char的指针.

char p[] 用于定义char的数组是不合法的,必须声明数组的长度,例如
char p[10];

或者下面的定义也是合法的:
char p[] = "abcde"; 定义了有6个成员的数组.

在函数的参数中, char p[]也是表示指针的,它和char *p没有什么区别.
例如下面的两种定义含义都是相同的:

void func(char *p);
void func(char p[]);
askcyg 2009-07-12
  • 打赏
  • 举报
回复
编译不通过
定义一个数组是要指定这个数组的长度的
haierpro 2009-07-12
  • 打赏
  • 举报
回复
如果没有指定size,编译器可能会罢工。
usr_src 2009-07-12
  • 打赏
  • 举报
回复
没有指定size会怎么样??
kouwenlong 2009-07-12
  • 打赏
  • 举报
回复
同意楼上说的.
Nio96 2009-07-12
  • 打赏
  • 举报
回复
char *p定义了一个指针p,用来指向char型的字符串。
这个定义是错的,要指定size: char p[size],相当于定义了一个size大小的数组。p是这个数组的首地址
usr_src 2009-07-12
  • 打赏
  • 举报
回复
多谢指点啊!!~
儿大不由爷 2009-07-12
  • 打赏
  • 举报
回复
char p【】 是声明,不是定义
usr_src 2009-07-12
  • 打赏
  • 举报
回复
函数参数的用法还是第一次看到过!!多谢~~!我受教了~~!刚学习c语言!!~~所以问题很多~~!多谢!!!

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧