关于int fuc(const char* a,.....)的联想

一土草三工 2010-07-21 04:36:14
经常在代码里面,见到函数的声明int fuc(const char* a,.....)

为什么要在char后面加上*?

为了验证这一想法,再问char* 与int *的区别



int *it=NULL;
int a= 100;
it = &a;
it = 100; //error,不能直接给指针变量赋值

char *st;
st = "test";//ok,这时候st不是指向char的变量了?能够直接赋值
cout<<st;输出了test字符串
cout<<*st;输出了t


谢谢大家了
...全文
139 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
ccmfk 2010-07-21
  • 打赏
  • 举报
回复
const char* a; a的值不能改变
cxxer 2010-07-21
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 wangjiang19 的回复:]
引用 6 楼 cattycat 的回复:
指针变量的基础就不知道啊。

int *it=&amp;a;
*it=100;可以。

对字符串,*str是取第一个字符。

还是系统的看书吧。不要猜想了。


为什么编译器,对于 cout<<str输出的是 "test",而不是内存地址

而cout<<it 输出的内存地址
[/Quote]

这里因为库在重载<<时对于char * 参数与 int *参数的处理不同。
cxxer 2010-07-21
  • 打赏
  • 举报
回复
char *是字符串指针。
wyz007134 2010-07-21
  • 打赏
  • 举报
回复
cout << a << endl;
cout << (int*)a << endl;
上面输出字符串,下面才是地址。
编译器对于输出对象对char*类型时,自动输出其指向的内容直到找到结束符'\0'
GARY 2010-07-21
  • 打赏
  • 举报
回复
而100无法从“int”转换为“int *”
一土草三工 2010-07-21
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 cattycat 的回复:]
指针变量的基础就不知道啊。

int *it=&a;
*it=100;可以。

对字符串,*str是取第一个字符。

还是系统的看书吧。不要猜想了。
[/Quote]

为什么编译器,对于 cout<<str输出的是 "test",而不是内存地址

而cout<<it 输出的内存地址
GARY 2010-07-21
  • 打赏
  • 举报
回复
“再问char* 与int *的区别”
楼主是想说:
it = 100; 不可以,而
st = "test";可以?
那你自己不是回答了吗?
“这样赋值是可以的,"test"是字符串,它的类型可以转换为char*。”
GARY 2010-07-21
  • 打赏
  • 举报
回复
我也不熟悉c++
不过
char *st = "test";

char st[] = "test";
是一样的吧。
*st = st[0]都是字符串首字母的地址
一土草三工 2010-07-21
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 liuyang1943 的回复:]
char *st;
st = "test";//ok,这时候st不是指向char的变量了?能够直接赋值
cout<<st;输出了test字符串
cout<<*st;输出了t


我被绕糊涂了,st = "test"是什么意思?可以这样吗?我一直都以为不行呢,我那么多的snprintf,memcpy,strcpy都白写了?
[/Quote]

这样赋值是可以的,"test"是字符串,它的类型是char*
GARY 2010-07-21
  • 打赏
  • 举报
回复
char *st = "test";
st保存的是字符串第一个字符的地址
*st的内容就是字符t
liuyang1943 2010-07-21
  • 打赏
  • 举报
回复
char *st;
st = "test";//ok,这时候st不是指向char的变量了?能够直接赋值
cout<<st;输出了test字符串
cout<<*st;输出了t


我被绕糊涂了,st = "test"是什么意思?可以这样吗?我一直都以为不行呢,我那么多的snprintf,memcpy,strcpy都白写了?
cattycat 2010-07-21
  • 打赏
  • 举报
回复
指针变量的基础就不知道啊。

int *it=&a;
*it=100;可以。

对字符串,*str是取第一个字符。

还是系统的看书吧。不要猜想了。
liutengfeigo 2010-07-21
  • 打赏
  • 举报
回复
char * 是指向字符的指针
b11ght 2010-07-21
  • 打赏
  • 举报
回复
int fuck
pengzhixi 2010-07-21
  • 打赏
  • 举报
回复
.....这个问题还是看书吧
  • 打赏
  • 举报
回复
这个...
楼主看的啥书啊?
taodm 2010-07-21
  • 打赏
  • 举报
回复
楼主还是买本最基础的教材吧,连指针都还没学会呢,你这样直接看代码非走火入魔不可。
DNS 服务器程序 实验报告 系统和运行环境描述 Windows7 操作系统平台,VS2010 编程环境。 使用 C/C++编写 dns 中继服务器。 系统功能设计 设计 DNS 服务器程序,读入 域名-IP 地址 对照表,当客户端查询域名对应的 IP 地址时,用域名检索该对照表,有三种检索结果: (1)检索结果为 ip 地址 0.0.0.0,则向客户端返回 域名不存在 的报错消息 (不良网站拦截功能) (2)检索结果为普通 IP 地址,则向客户返回这个地址(服务器功能) (3)表中未检到该域名,则向因特网 DNS 服务器发出查询,并将结果返给客户 端(中继功能) 。 需要考虑的问题: (1)多客户端并发 允许多个客户端(可能会位于不同的多个计算机)的并发查询,即:允许第一个 查询尚未得到答案前就启动处理另外一个客户端查询请求(DNS 协议头中 ID 字 段的作用) 超时处理 (2)由于 UDP 的不可靠性,考虑求助外部 DNS 服务器(中继)却不能得到应答 或者收到迟到应答的情形。 主要数据结构 主要的全局的数据结构定义在 dns.h 的头文件中。 struct req_inform{ struct sockaddr_in cli_addr; unsigned short id; };//id和 cli_addr 唯一标识一个DNS请求 该结构唯一标示了一个来自客户端的 dns 请求。 map url_ip_table; 用来构建本地存储的 url_ip_table.txt 中域名和 IP 的映射。 map req_cache[cache_num]; 这一个 map 映射,把客户端 dns 请求映射到一个 unsigned short 上面,用它来 存储 id 转换表。另外和 id 转换表相关的参数是如下: #define cache_num 3 #define cache_size 1000 int cur_cache=0; int idThen_max=cache_num*cache_size; int idThen=0; cache_num 指定了 id 转换表的个数,cache_size 是每个 id 转换表的大小, cur_cache 指向是当前正在装入的 id 转换表, idThen 是一个从 0 到 0xFFFF 一直 循环的被映射到的 id 号。 这个设计的作用是代替了时间戳,而且可以根据实际情况来指定 id 转换表缓存 的大小。 具体流程是: 生成 id 转换的 item(idThen,struct req_inform 的一个变量) 把 id 转换的 item 加入到 req_cache[cur_cache]中 如果 req_cache[cur_cache]已经达到 cache_size{ cur_cache 指向下一个 id 转换表,并将其清空 } idThen 加 1 具体实现在 dns_fuc.cpp 的 ask_next_server 函数中。 int sockfd; struct sockaddr_in ser_addr,nser_addr; sockfd 是一个绑定到 ser_addr(dns 服务器本机 53 号端口)的一个 socket 描述 符,用它来进行 udp 报文传输。 ser_addr 初始化为本地 53 号端口的地址, nser_addr 是上级服务器的 53 号端口 (中继功能时使用) 。 const char * nx_ip="211.68.71.4";//保存上级服务器的 ip const char * file_name="C:/Users/Administrator/Desktop/dns/dns/url_ip_table.txt"; //保存 url_ip_table.txt 的路径 struct dns_ans_add{ unsigned short url_pointer; unsigned short type; unsigned short clas_s; unsigned short time1; unsigned short time2; unsigned short sourse_size; unsigned int sourse; }; 这个是与 dns 请求相比 dns 响应追加部分。 模块划分 int get_url_ip_table( map& table); 用来从文件中读入 url_ip_table。 int init(); 用来初始化 ser_addr、nser_addr、sockfd,以及对 sockfd 绑定

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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