P包含一个地址和数据类型,初始地址为0xN的时候每自增一次 P地址就向后偏移一个数据类型的大小 比如说int值有4个字节,那么P+1 的地址就是0xN+4,又或者是double类型就是0xN+8
受一些gdb的影响
0x吧这样算啊
这个没有同学
ddfc和de00
ddfc:1101 1110 0000 0000
de00:1101 1101 1111 1100
差:1111 1100
我的理解是:
32位的二进制表示也就是2^32=(2^4)*(2^28)=16*(2^28);
64位的二进制表示也就是2^64=(2^4)*(2^60)=16*(2^60)
程序已经崩了唉,都已经segmentation fault了,指针已经飞了,找不到函数,自然进不去了
按照你输入的顺序进行归类,也就是说你输入的顺序是怎么样的,输出就会怎么样,比如说你输出一个char,一个int,输出时就会自动优化先输出char,再输出int。
讲的不错,虽然没有练习,但是还是受益匪浅,本人自己总结了C语言的基本学习知识,函数语法 数据结构 链表 数组 指针等视频合集给大家提供学习,包括习题和项目学习资料,
需要学习的,包括有学习相关问题,可以进入(裙:834597065)交流,里面有众多大佬帮助解决学习、技术问题,只针对C/C++问题哦
两个函数中的变量有不同的作用域,所以int中的ab,和子函数中的ab就不一样了
没有关系,只是因为指向的地址不同. 后面能改是因为你直接指向了a变量的地址. 如果不通过地址进行修改的话.只是局部变量. 存在于另一个空间
对啊,视频说的就是b是dde0,他说的是b的下一个地址应该是de04
每个字符串在内存中都占用一段连续的存储空间。并有唯一确定的首地址。因此可以将字符串的首地址赋值给字符指针。则可以让字符指针指向一个字符串。对于字符串常量而言,字符串常量本身就代表他常量存储区的首地址。
运行的时候,就加载了。是无法更改的,在我们的内存中代码段中的。栈内存和堆内存才能更改。
看20s时作者的声明,他声明的a是地址,*a是其中包含的内容
int*可以理解为一种数据类型,和int一样,int*是申明一个地址变量a,a用来接收传入的地址
那跟硬件有关,跟系统无关
我自己理解了,,P[4]代表的是确定的变量,这里表示array[1],指针并没有移动
伴随着i的自增,p也会自增(p++),不是单纯的偏移,而是每次自增偏移一位后又赋给p,p的值本身发生了改变,往后移了一个地址(p本身就是执行int型的指针,所以每次偏移都是跨越一个int的长度,即四个字节,指向内存中存储的下一个变量)。这时在去*p,就是访问的内存中a之后的存储的下一个int变量了。
-- 我看错了---
-----哦哦我看错了现在正确了
----但是为什么输入里面不能写change?
-----还有为什么输入里面printf("numa=%d,numb=%d",a,b); a和b前面不用加&了?
懂了。。16进制的这些只是内存地址的编号,而内存条最小存储单元的大小为1个字节,也就是说0xddfc这个地址编号对应的内存中能存储1个字节的数据.
内存条最小存储单元为1个字节,因此32位PC的寻址空间包含2^32个地址,每个地址对应1个字节的数据空间,那么32位PC的最大内存为2^32字节=4G
一个字节
的确,新版本的编译器更聪明了