您的位置:

奇葩c语言,比较有意思的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还能输出什么呢?所以一点也不奇葩!