‘壹’ c语言关于指针的问题
int a[5]={11,22,33,44,55};
int *p;
p=a;
int i;
for(i=0;i<5;i++)
printf("%d ",*p++);//*和++的优先级是同级(14),如果是同级就按照结合方向自右向左
//因此p先和++结合,然后与*结合,那么就成了*(p++),而这时候++又是后置运算符,所以第一次循环p指向的是a[0],那么*p就是11,输出之后p向后移动,所以输出就是后者
printf("\n");
请问这个为什么输出的不是22,33,44,55和一乱码,而是11,22,33,44,55
‘贰’ 关于对c语言中指针的问题
应该是这样吧:
typedef struct TreeNode Node;
typedef struct TreeNode *NodePtr;
这两行就是定义类型别名
Node p;就是struct TreeNode p;
NodePtr p;就是struct TreeNode *p;
-----------------------------------
NodePtr insert(Node root);/*添加节点,返回节点指针*/
这是值调用
NodePtr insert(NodePtr root);/*添加节点,返回节点指针*/
这是引用调用(指针)
‘叁’ C语言,关于指针的。。疑惑。。
函数指针就是指向函数的指针的,那句定义是指定了该指针能指向的函数的类型(包括参数、返回值类型),
指针p指向函数fun的赋值语句为 p=fun 也是好理解的,因为我们知道函数名本身就是函数入口地址,所以不必加&之类的。
‘肆’ 有没有内容跟单片机c语言diy之类有关的电影
有的 优酷有很多这样的视频呢
‘伍’ 关于C语言的指针问题,求助
(1)strcmp的原型是int strcmp( const char *string1, const char *string2 );其参数是传入两个要比较的字符串的地址。函数的实现部分肯定会用指针指向的内容作比较的。
(2)
void swap(int *p1,int *p2)
{ int *p;
p=p1; p1=p2; p2=p;
}这个函数确实不能实现交换,因为虽然参数是指针,但传给swap的参数其实是指针的拷贝,所以当退出swap函数后,p,p1,p2会退栈,也就是根本没有真正的交换两个数据。
而void sort(char *name[ ],int n) 有点意思,传进去的也是一个字符串的首地址拷贝,但是该函数内部对字符串地址偏移做了操作,也就是他改变了原指向字符串数组中字符串指针在数组中的排列顺序,有点绕人,举个例子吧,例如:
"Follow","Great", "FORTRAN","Computer"的地址在原始数组中的排列为0xe8,0x60,0x40,0xb8,当sort换过之后,对应的地址在数组中的排序变为了0xb8,0x40,0xe8,0x60,,
‘陆’ 关于C语言中指针函数的问题
不行, 原因是found函数已经声明成返回一个int指针的函数了,如果不声明p为指针则在p=founc(a,n)时会因为类型不匹配而报错。两种方法可以解决:1,直接省略掉变量p,在printf语句中直接用printf("%d", *found(a,n));来输出结果;2,修改found函数为:<pre t="code" l="cpp">int found(int b[10], int n)
{
return b[n-1];
}则p可以直接声明为int, 且赋值时用p=found(a,n); 输出时用printf("%d", p);可以看到这样改动的比较多。
‘柒’ 关于c语言的指针相互指向
指针变量也是变量,同样存储在内存中,它也有一个地址,取变量a的地址存在指针变量p中,所以&a和p的值肯定是相等的
取指针变量p的地址赋值给q,即q此时存储着指针变量p的地址,而*q则是 指向 q中存放的地址 (指针变量p的地址),所以*q的值即是指针变量p中存放的地址,即是变量a的地址。
所以三个值相等。
‘捌’ C语言关于指针的问题~~~
search的第一个形参pointer是一个指针——指向4个float构成的数组的指针.
float score[][4]的score作为实参, 类型正好合适.
为什么?
我们知道数组名可以表示其第一个元素的地址. 所以, score作为实参传递给search, 相当于&score[0]传递给search函数.
score[0]是什么? 它就是4个float构成的数组, 因此, &score[0]可以视为指向4个float构成的数组的指针, 与形参pointer的类型完全一致.
需要解释一下: 从本质上说, score的第一个元素是score[0], 而不是score[0][0]——许多教材没有对此予以澄清.
换句话说, 二维数组的本质仍是一维数组, 只不过其每个元素又是一个数组. 比如score, 本质上是3个元素(score[0], score[1], score[2])构成的数组, 而这3个元素本身是由4个float数构成的数组.
若是 float *score[3][4], 则score的3个元素都是由4个float*型指针(而不是float变量)构成的一维数组. 这显然与pointer的要求不符.
float *score[][4]={{60,70,80,90},{66,77,88,99},{65,75,85,95}}; 自然也不符合语法, 只能这样(举个例子):
float *score[][4]={{&a,&b,&c,&d},{&e,&f, &g, &h}, {&i, &j, &k, &l}};
假设 a,b,c...l均为float