-
230=G 240=T查看全部
-
start开始调试 n下一步 p打印 s进入子函数查看全部
-
gdb打印: p &a;或p/3d 0xffffff14表示从此地址连续打3个变量值出来。查看全部
-
(* faddr)(int a)可表示调用faddr地址处的函数,a是给这个函数传参。这就是回调函数。查看全部
-
代码段存代码,数据段存变量,栈存的调用函数查看全部
-
代码段从低往高存,栈从高往低存。查看全部
-
x64机器中指针是64bit查看全部
-
调函数可以传变量值,函数内return。或者直接传指针。&a指变量a的指针。查看全部
-
gdb调试工具,配合gcc使用查看全部
-
- gcc -g main.c -o main.out - gdb ./main.out - list - l (显示完整代码) - start (开始执行程序) - p a (printf a变量) - n (继续执行) - p b (printf b 变量) - n - p a (......) - p b (......) - n (继续执行下一行) - s (查看函数里面) - n (执行下一行) - bt (查看函数的数量 和堆栈,函数在哪一行被调用) - p a (打印函数里面的变量) - f 1 (跳到函数1的堆栈里面) - n (继续执行) - p a - p b (继续查看a和b变量的值)查看全部
-
操作系统会把同一类型的数据放在一起查看全部
-
字符串在遇到\0时就会停止不会执行后面的 数组赋值时不要溢出 会覆盖其他地址甚至其他数据 数组和数组地址不是连续的 会空几个地址 数组其实就是连续的地址 比如可以用for循环挨个打印元素 在char数组里 \0也是一个元素 在字符串中是隐藏的元素 在单个字符元素时要以‘\0’结尾 数组和指针的差别 数组的开始地址不能改变 但可以改变他指向的地址的内容 而指针可以改变自己的开始地址也可以改变地址里的类容 指针字符串 指向的对象的内容不能改变 这个内容是一个常量 存放在数据段 但可以改变对象查看全部
-
char类型的指针变量 里面的值在代码段 用scanf输入数组类型的值时 可以不用加& 因为数组名称本身就是地址 指针类型的字符串不能输入 字符串遇到\0就结束不会打印后面查看全部
-
p+=3改变了p的地址 p【3】=x没有改变p的地址查看全部
-
int arr[3]; arr[0]=4; arr[1]=5; arr[2]=6; int i; int *p,j; for(i=0;i<3;i++) printf("arr[%d]=%d\n",i,arr[i]); for(p=arr,j=arr,i=0;i<3;i++,j++) printf("p[%d]=%d %p j>>%d=%d %p\n",i,p[i],p,i,*j,j); 输出结果 arr[0]=4 arr[1]=5 arr[2]=6 p[0]=4 0x7fff883b1d20 j>>0=4 0x7fff883b1d20 p[1]=5 0x7fff883b1d20 j>>1=5 0x7fff883b1d24 p[2]=6 0x7fff883b1d20 j>>2=6 0x7fff883b1d28 通过实验得知 变量和数组的地址不一定是连在一起的 但是同一数组的元素是连着的 第一种 j++ 表示指针里保存的地址换成下一个数据地址,也就是改变了j的值 所以可以吧一个数组赋值给一个指针变量(赋值格式int *j=arr;)然后通过循环每次自增1来遍历这个数组 注意这种方法每次遍历都会改变j的值 即j保存的地址 *j打印保存的地址指向的值 j打印保存的地址 第二种 在把arr数组赋值给指针变量p后,p在转换打印时可以直接当成数组arr使用 比如p【1】p【2】等同于arr【1】arr【2】 注意 这种方法并不改变p保存的地址 即p保存的arr数组的第一个元素地址查看全部
举报
0/150
提交
取消