社区
C语言
帖子详情
char*p char p【】 有什么区别?
usr_src
2009-07-12 11:22:25
char *p 和char p【】有什么区别啊??
...全文
259
11
打赏
收藏
char*p char p【】 有什么区别?
char *p 和char p【】有什么区别啊??
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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;
}
dfsb
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语言!!~~所以问题很多~~!多谢!!!
const
char
*p;
char
* const p;const
char
* const p;
const
char
*p;
char
* const p;const
char
* const p; 前言 const 限定符,它把一个对象转换成一个常量,而常量不能修改。 一、 const
char
*p; const修饰*p,所以 *p在等号左边的操作都是不合法的,因为 *p不可变,...
char
* p指针和
char
** p指针
char
p是声明一个字符类型变量p,
char
* p1是声明一个字符类型的指针变量p1,那么
char
** p2就相当与给
char
类型的指针变量再声明一个指针.(2级指针) 例如
char
 *p ;//
char
 指针 ...
关于
char
const **p、
char
* const *p、
char
** const p的
区别
一直对指针理解的不是很深,在复试也被提问这方面的问题回答凌乱十分尴尬,索性一次性好好理解一下指针和const结合的
char
const **p、
char
* const *p、
char
** const p之间的
区别
。 理解思路 理解方法:将const当作...
const
char
* p 和
char
* const p 的
区别
// const作用在
char
上,声明一个指向字符或字符串常量的指针p,p可以修改而p所指向的内容无法修改。
char
const *p;// 同上
char
* const p;//const作用在p上,声明一个指向字符或字符串的指针常量,即p不可以...
c语言
char
*p 数组p,关于:
char
(*p)[10] 、
char
p[10]和
char
*p[10]的讨论
发现自己C语言基础有漏洞,果断和大家讨论下:直观理解:1.
char
(*p)[10] 是指向数组的指针...指向数组的指针
char
(*p)[10] 中,p指向的是一个10个
char
大小的数组,p+1 和 p 的差距是 sizeof(
char
p [10]),p+1已指到...
C语言
70,033
社区成员
243,245
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章