本文目录一览:
- 1、c语言 int *p=5 是啥意思。 是p的地址是5。还是*p的值为5
- 2、*--p执行之后p指向的内存单元被改变了吗?为什么
- 3、c语言程序。
- 4、用c语言写归并排序是遇到的奇葩问题
- 5、【C语言】程序奇葩问题。。求解答。。已编译
- 6、C语言二级指针奇葩问题
c语言 int *p=5 是啥意思。 是p的地址是5。还是*p的值为5
你的问题问得很好,这是初学者常困扰的地方。
外形一样的东西,在声明里 和 在语句里 意思 可能不同,这是 C 语言奇葩 之一,常困扰初学者的地方。
int *p=5; 这是声明。声明里 *p 只是表示 声明 p 是指针。 *p=5 叫初始化。
但这样的初始化方法是错误的!指针 初始化 要给 地址,不能给值。
声明里,正确写法如下:
int a=4;
int *p=a;
这样才对。int *p=a; 声明 p 是指针,初始化 给 变量a 的地址。
语句里 可以写:
*p =5; 这是赋值语句,语句里 *p 表示指针指向的值,赋5。
语句里 可以写:
p = b; 语句里 没星号的 p 表示指针指向的地址,赋 变量b 的地址。
所以要分清 是声明 还是 语句。
*--p执行之后p指向的内存单元被改变了吗?为什么
前缀 -- 优先级高于 *. 按规定,表达式中有前缀--时,要先执行减1再计算表达式的值。
所以 *--p 要分解为 2步。 求地址 p=p-1, 再取值 *p。
p指向的内存单元被改变了吗? p指向的内存单元 通常 在遇到分号后 改变。
例如:
int a[]={1,3,5,7,9}, *p;
p= a[2];
printf("%d %d\n", *--p, *p); //这里 *p 指向未变 输出 3,5
printf("%d\n", *p); //这里 *p变了。
也有复杂情况,下面是c语言奇葩:
p= a[2];
printf("%d %d %d\n",*p,*--p, *p); 前一个*p变了,后一个*p没变。输出 3 3 5.
所以要避免用 *--p 这类东西。
c语言程序。
这代码太奇葩了:自定义函数是min,调用时却用的是max,输出也是maxmum。由于max没有被声明,编译器不认识,自然要出未定义错误。把c=max(a,b);改成c=min(a,b);,把maxmum换成minmum就可以了。(maxmum可以不换,那只是提示,不影响正确执行)。
用c语言写归并排序是遇到的奇葩问题
你那两行
L1[n1+1] = MAX_INTEGER;
L2[n2+1] = MAX_INTEGER;
数组访问出界了。改为
L1[n1] = MAX_INTEGER;
L2[n2] = MAX_INTEGER;
就可以了。原因应该不用我多说了。楼主应该加赏,且不说我花了不少时间帮你排错,就你那不问性别概称大婶也该自罚,:)
【C语言】程序奇葩问题。。求解答。。已编译
strcpy函数执行后,str3的内容会被str2的内容给覆盖……再有,你最后没有给读入的字符串加上‘\0’(因为你是循环读入的)其实直接用两个gets就行了……
c语言中比较是否相等要用“==”,不是‘=’。
供参考:
#includestdio.h
#includestring.h
int main(void)
{
char str1[100],str2[100],str3[100],c;
int i,j,k,l,n;
printf("字符串操作函数联系程序---001\n");
printf("请输入字符串1和字符串2。。。程序将进行比较!\n");
printf("请输入字符为str1赋值:");gets(str1);
printf("请输入字符为str2赋值:");gets(str2);
sprintf(str3,"%s%s",str1,str2);
printf("两字符串相接后为:%s\n",str3);//printf想输出后面的整个字符串,用%c合适吗?buheshi
k=strcmp(str1,str2);
printf("k等于%d\n",k);
if(k0)
{
printf("str1大于str2的ascii码");
}
else if(k0)
{
printf("str1小于str2的ascii码");
}
else if(k==0)
{
printf("两个字符串相等");
}
getchar();
return 0;
}
C语言二级指针奇葩问题
很正确啊,看下面两句就应该清楚了吧?注意p是二级指针,并不直接指向{W...}
str[2]= p[1] + 3;//这时p[0]指向str[2],p[1]指向str[3],即最终内容是Nanjing;p[1] + 3最终内容就是jing;你把str[2]通过执行p[1] + 3指向了jing,而p[0]是指向str[2]的;由于*p就是p[0],printf("*p=%s\n",*p);就是printf("*p=%s\n",p[0]);,也就是printf("*p=%s\n",str[2]);,不输出jing还能输出什么呢?所以一点也不奇葩!