#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的话,它不是指针。
指针变量储存的是地址,它本身也有内存空间,也有本人的地址。
1、输出的是int类型,是十进制。
2、开始地址。
3、可以。
4、假如你说的是&str1的话,它不是指针。
指针变量储存的是地址,它本身也有内存空间,也有本人的地址。
10
数组名 str加上取址运算符&,
表示取str 这个N元素的数组的地址
该地址代表整个数组
数组名,单独出现在表达式中,
(除了有限的结个例外)
往往解析为数组首元素的地址,
这个地址和数组地址值是相同的,
只是类型不同 一个是 字符地址。
一个是字符数组地址。
输出地址用 %p
输出字符串 用 %s
输出数组,只能循环了,没有直接输出的方法
输出结果,也是自行定义
表示取str 这个N元素的数组的地址
该地址代表整个数组
数组名,单独出现在表达式中,
(除了有限的结个例外)
往往解析为数组首元素的地址,
这个地址和数组地址值是相同的,
只是类型不同 一个是 字符地址。
一个是字符数组地址。
输出地址用 %p
输出字符串 用 %s
输出数组,只能循环了,没有直接输出的方法
输出结果,也是自行定义
20
对
10
数组结束地址由 数组长度,类型长度 决定
char 长度一般是一个字节
char [N] 就是N个字节
地址本身,只表示位置
但是C,C++ 表示地址的数据,其实是指针,是有类型的指针
这个类型的长度,表示下一个同类型数据,最近可以存放在哪里(距离为0时候)。
这也是指针加减法的单位长度 ++ 增加一个单位长度 , +=n ,增加 n个单位长度
注意 void 类型长度为0 ;
void* 指针,无法计算长度(其实是0),
虽然是通用类型的指针,但是指针算术运算,却不能进行。
PS:
字符串结束符,不是数组结束符。仅仅表示这一串字符到此结束。
数组通常比这长些.
二者至少是相等的,
串长不会长过数组长度除非越界(出错了)
char 长度一般是一个字节
char [N] 就是N个字节
地址本身,只表示位置
但是C,C++ 表示地址的数据,其实是指针,是有类型的指针
这个类型的长度,表示下一个同类型数据,最近可以存放在哪里(距离为0时候)。
这也是指针加减法的单位长度 ++ 增加一个单位长度 , +=n ,增加 n个单位长度
注意 void 类型长度为0 ;
void* 指针,无法计算长度(其实是0),
虽然是通用类型的指针,但是指针算术运算,却不能进行。
PS:
字符串结束符,不是数组结束符。仅仅表示这一串字符到此结束。
数组通常比这长些.
二者至少是相等的,
串长不会长过数组长度除非越界(出错了)