指向int和char(数组)的指针

时间:2016-12-31 16:28:26

标签: c pointers

我不明白指向字符的指针与指针的指针有何不同,例如:

int a = 10;
int *b = &a;
printf("%d\n", *b); // print 10
char* d = "Hello";
printf("%d\n", (int) *d); // print 72, ASCII of H

这是什么"你好"?每个字符都是int的地址,因此" Hello"一组地址?

3 个答案:

答案 0 :(得分:4)

C不是严格类型安全的,尤其是json_data = '[{"Detail":" Rs. 2000 Topup Rs.1779.99 Talktime","Amount":"2000","Validity":"Unlimited"},{"Detail":" Rs. 1900 Topup Rs.1690.99 Talktime","Amount":"1900","Validity":"Unlimited"}]' 函数接受任何输入(printf语法),它的解释方式由格式字符串处理:{{ 1}}表示"将第N个参数视为十进制整数"。

...%d的类型不同。他们不同的另一种方式是,与char*相比,int*增加时他们的行为方式如下:

char*

答案 1 :(得分:2)

如果你认为他们都持有地址......那么

有什么区别?

差异是假设我有10个字节的内存

---+---+---+---+---+---+---+---+---+---+
|  |   |   |   |   |   |   |   |   |   |  
---+---+---+---+---+---+---+---+---+---+
1    2   3   4   5   6   7   8   9    10

现在假设char的大小为1 bye,int为4 byte。

现在,如果有人要求您提供从地址1开始的整数,您将做什么?

你知道int的大小是4个字节,所以你得到它并显示它。

类似于char,您只需获得1个位置值并显示它。

现在一个指针同样需要知道在被要求(解除引用)时应该考虑多少......

int*char*不同的地方。否则他们都持有收件人。使用char*,您可以得到一个整数的所有字节,但这是用户的一部分开销。

形式上....

指向类型的指针基本上告诉指针它应该从它的当前位置在内存中移动了多少,以及从它开始时需要考虑多少字节的指向地址。

怀疑-1为什么我们不需要&"你好"?

char *d= "Hello"将放置"您好"在内存的只读部分,并使d成为指针,使得对该内存的任何写入操作都是非法的。

  

也在C"你好"有char []类型。   并且数组可以自动转换为第一个元素的地址

答案 2 :(得分:0)

首先,您对char*的使用是一个坏主意,因为虽然字符串文字是' char [6]',但您无法合法修改它,所以你最好使用const char*代替。

除此之外,d将保存指向字符H的内存地址。在大多数平台上,char长度为1个字节 - 因此,d++可能会将内存地址增加1个字节

另一方面,让我们说int是4个字节。如果dint*,那么d++会将内存地址增加4。