讨教用printf显示地址

C语言 码拜 9年前 (2016-04-10) 1421次浏览
#include<stdio.h>
#include<string.h>
int main(void)
{
	char str1[]="silenthunter";
	printf("%d\n", &str1);
	return 0;
}

在本人的电脑显示1244995。讨教以下问题:
1 它是不是个十进制地址?
2 是字符串开始位置的地址,还是整个字符串的地址?
3 能否可以用这组数字返过来找到字符串?
4 指向这组数字的东西是不是叫指针?储存指针的东西是不是叫指针变量?

解决方案

10

数组名代表数组的地址,它不是指针,是符号地址常量,在内存中没有给它分配空间。所以对它取地址应该是不合法的。但一般对它取地址后得到的值就是它本身代表的值,即数组的地址。
1、输出的是int类型,是十进制。
2、开始地址。
3、可以。
4、假如你说的是&str1的话,它不是指针。
指针变量储存的是地址,它本身也有内存空间,也有本人的地址。

10

数组名 str加上取址运算符&,
表示取str 这个N元素的数组的地址
该地址代表整个数组
数组名,单独出现在表达式中,
(除了有限的结个例外)
往往解析为数组首元素的地址,
这个地址和数组地址值是相同的,
只是类型不同 一个是 字符地址。
一个是字符数组地址。
输出地址用 %p
输出字符串 用 %s
输出数组,只能循环了,没有直接输出的方法
输出结果,也是自行定义

20

引用:
Quote: 引用:

对的,会自动帮你加上”\0″(注意不是”0″本人注意区分)

谢谢。
进一步说0012ff43就是字母S的地址啦?
若把0012ff43放到一个名叫ABC的变量里,于是ABC就成为指针变量。
凭着ABC指针变量去内存里就能找到str1字符串开始的位置,然后开始读取,读到\0结束,于是读出str1字符串变量的内容?
是不是这样子?

10

数组结束地址由 数组长度,类型长度 决定
char 长度一般是一个字节
char [N] 就是N个字节
地址本身,只表示位置
但是C,C++ 表示地址的数据,其实是指针,是有类型的指针
这个类型的长度,表示下一个同类型数据,最近可以存放在哪里(距离为0时候)。
这也是指针加减法的单位长度 ++ 增加一个单位长度 , +=n ,增加 n个单位长度
注意 void 类型长度为0 ;
void* 指针,无法计算长度(其实是0),
虽然是通用类型的指针,但是指针算术运算,却不能进行。
PS:
字符串结束符,不是数组结束符。仅仅表示这一串字符到此结束。
数组通常比这长些.
二者至少是相等的,
串长不会长过数组长度除非越界(出错了)

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明讨教用printf显示地址
喜欢 (0)
[1034331897@qq.com]
分享 (0)