void main(){ int a[] = {1,3,4};int *p = &a[-1];int i =0;for( i = 1; i <4; i++){ printf("%d\n", p[i]);} } 1。 因为数组并不检查下表是否越界 2。 下表仅表示偏移, -1就表示第一个元素前面那个元素 ...
如果不带*的情况下,二者相同,都是pointer_1自加。如果是 (*pointer_1)++ 和*pointer_1++ 那么由于++优先级更高。所以 前者是*pointer_1 也就是pointer_1指向的值自加。后者是pointer_1自加。*pointer_1不变。
首先更正一下楼主错误,int 型的指针不可以用来获取char型的地址的,这样会产生错误,如果你的编译系统没有报错,实际上也有错误。第二,字符串实际上就是等于字符数组。ptr = &str[2];printf("%d",ptr);reptr = *(ptr);printf("%c",reptr);printf("\n");这个可以输出的。就是C ptr = &...
指针变量pointer_1指向变量a的地址,这个地址中存放的是变量a的值5。指针变量pointer_2指向变量b的地址,这个地址中存放的是变量b的值9。如果此时用取值运算符*取这两个指针变量的值,会发现*pointer_1的值是5,*pointer_2的值是9。接下来执行的语句swap( pointer_1, pointer_2);把两个作为实际参...
int s[5]={1,3,5,7,9};int *p=s; //将s的起始地址赋给p,也就是 p指向地址s[0],那么 *p就是s[0]的值也就是1 那么值为3的是什么,是s[1],也就是p指针的下一个地址里存的值,也就是*(p+1); 也就是 (++p) 选A B答案的++(*p)是 先得到*p 也就是1,然后++,也就是...
我想这个和C语言的指针有关系,其实在C语言中,所有的都可以用指针代替p,偏移量用p+n,n是从0开始的,比如数组类型,就可以用p+0,...,p+n-1,这种方式表示,然后用[0...]这种方式取值,其实都是指针,然后c++,java,其实基础都是c语言。这些都是比较流行的语言,然后很多新出的语言的设计者...
(1) ++(*pointer)是先取值,再自增,当前pointer指向的是位置arr[3],取值后是2,*pointer的结果是2,2再自增,当然会得出3。值得说明的是,这个括号是可以省略的,此处括号只起到增加程序可读性的作用。(2)*(pointer-2)是先移动指针,再取值。pointer-2是把指针从当前位置arr[3]回退两...
C语言中double默认输出 6 位小数。如果要控制输出小数位数,可以格式化输出。printf("%.3lf ", d); // "%.3lf" .3 则是输出 3 位小数。printf("%.4lf ", d); // "%.4lf" .4 则是输出 4 位小数 。C语言兼顾了高级语言的汇编语言的优点,相较于其它编程语言具有较大优势...
int a;int *p=&a;//*p是取值,p只a的地址,&p是指针的地址;二维数组;int a[2][2];int **p=a;p指向a地址,*p表示a[0][0];p则是a[0][0]的值 (*p+1)则是a[0][1]d的值 /// p就相当于数组名,1就是元素位置所占的内存字节。懂了没?
这句话的意思是将ptr1指向的内存单元的值乘以ptr2指向的内存单元的值,并将结果赋值给k。