社区
C语言
帖子详情
char*p char p【】 有什么区别?
usr_src
2009-07-12 11:22:25
char *p 和char p【】有什么区别啊??
...全文
220
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;
}
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语言!!~~所以问题很多~~!多谢!!!
MySQL 数据类型和运算符
Re: MySQL 数据类型和运算符=============================# 数据类型 整数类型:五种 TINY SMALL MEDIUM INT BIG 浮点和定点小数类型:三种 FLOAT DOUBLE DECIMAL 日期与时间数据类型:五种 YEAR -1 字符串类型:二种
CHAR
(M) VAR
CHAR
(M) -1 二进制字符串:位字段BIT 固定BINARY 可变VARBINARY -1 # 运算符 算术 运算符 比较 运算符 逻辑 运算符 位操作 运算符 运算符的优先级-------------------------------------
const
char
*p,
char
const *p和
char
*const p
区别
(面试题常见)
请看下面三种定义: const
char
*p;
char
const *p;
char
* const p; 请问三者有什么
区别
? 先看第一种,先看p,根据优先级它和*结合,是指针,指向
char
类型,但是
char
前面有一个const修饰,所以p所指向的内容为const类型不可修改。 第二种:由于没有const *的运算,若出现const *的形式,则const实际上是修...
char
*p与
char
**p
char
*p与
char
**p
char
str[6]={‘H’,‘E’,‘L’,‘L’,‘O’,’\0’}
char
*p=str
char
** p=&p
char
*p相当于p取了str的地址, * p才是str的内容。而
char
** p相当 * p于取了 str的地址,**p才是str的内容。而p是 * p的地址 假若str是你的钱包,那么
char
* p 中的p在这里就是存...
const
char
*p,
char
const*p和
char
* const p的
区别
const
char
*p;//
char
*p是一个指针,指向
char
类型的,被const修饰,表示指向的内容是无法改变的 //但是,p可以改变
char
const *p;//由于没有const *的指针类型,所以const修饰
char
*p,和const
char
*p的效果一样
char
* const p;//const直接修饰p,表示p无法修改,但是指针指向的内容可以修改 总而言之,由const直接修饰的无法更改 ...
深入理解const
char
*p,
char
const*p,
char
*const p,const
char
**p,
char
*const*p ...
一、可能的组合: (1)const
char
*p (2)
char
const*p (3)
char
*const p (4)const
char
**p (5)
char
const**p (6)
char
*const *p (7)
char
**const p 当然还有在(5)、(6)、(7)中再插入一个const的若干情况,不过分析了以上7中,其他的就可类推了! 二、理解助记法宝:...
C语言
69,382
社区成员
243,073
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章